Elixir/Phoenix-based personal website with blog.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Adam Piontek ea297c8b7f edited for clarity 3 months ago
assets updated dependencies 3 months ago
config added custom error templates, and fun error testing routes 4 months ago
lib switched to source serif pro as main font, fixed some other styling 4 months ago
priv edited for clarity 3 months ago
test added content, post display 4 months ago
.formatter.exs initial commit 4 months ago
.gitignore fixing purgecss issue with chroma styles 4 months ago
.iex.exs syntax highlighting and blog/post liveviews working; numerous other styling updates 4 months ago
.sobelow-conf adding proper CSP header plug and setting ignore config for mix sobelow 4 months ago
README.md improving code styling 4 months ago
mix.exs added content, post display 4 months ago
mix.lock updated dependencies 3 months ago



Personal website with blog.

Blog posts

Posts are markdown files stored under priv/content and parsed by Earmark. This can be configured in config.exs under config :home73k, :app_global_vars, blog_content: "path/to/content"

Syntax highlighting

For the challenge of it, and to keep user's browsers from having to run javascript just to highlight some code, I chose to do server-side syntax highlighting.

Due to the lexer limitations of elixir-native solutions, the highlighter uses Chroma by calling its command-linie-interface via System.cmd

However, this requires installing golang as well as chroma. You can add go to your path, but once chroma is installed, just make sure Home73k's config.exs is configured to point directly to the chroma binary under config :home73k, :app_global_vars, chroma_bin: "path/to/bin/chroma" -- "priv/go/bin/chroma" by default.


New versions

When improvements are made, we can update the deployed version like so:

cd /opt/home73k
git pull
mix deps.get --only prod
MIX_ENV=prod mix compile
# update chroma in priv gopath
GOPATH=$(pwd)/priv/go go get -u github.com/alecthomas/chroma/cmd/chroma
# rebuild static assets:
rm -rf priv/static/*
npm run deploy --prefix ./assets
MIX_ENV=prod mix phx.digest
MIX_ENV=prod mix release --overwrite
# test starting it:
MIX_ENV=prod _build/prod/rel/home73k/bin/home73k start

systemd unit:

Description=Home73k service
After=local-fs.target network.target

ExecStart=/opt/home73k/_build/prod/rel/home73k/bin/home73k start
ExecStop=/opt/home73k/_build/prod/rel/home73k/bin/home73k stop


nginx config:

    upstream phoenixhome {
      server max_fails=5 fail_timeout=60s;
    server {
      location / {
        allow all;
        # Proxy Headers
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Cluster-Client-Ip $remote_addr;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        # WebSockets
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://phoenixhome;