Developer Portfolio README

Latest release v2.0.1 · this is the file that ships inside the package

Phoenix Portfolio Template

Legacy Template — maintained for security and compatibility fixes only. No new features. EOL review: July 2027. See LEGACY-STATUS.md. For actively developed starters, see the core PHX products at phxtemplates.com.

A single-page developer portfolio built with Phoenix 1.7 and LiveView 0.19:

  • Sticky sidebar with jump-link navigation (About / Experience / Projects / Contact) and a LiveView-driven active-section highlight.
  • Experience timeline and project cards driven by plain Elixir data in lib/portfolio_template_web/live/home_live/index.ex — no database content to manage.
  • Contact form wired for EmailJS (client-side, placeholder credentials shipped — nothing sends until you add yours).
  • Optional Buy Me a Coffee widget (disabled until you set your id).
  • Ships with the demo persona “Alex Rivera” — all demo content is redistributable placeholder copy for you to replace.

Why is there auth code if the site has no login?

The public portfolio needs no accounts, so no auth routes ship enabled. The full phx.gen.auth implementation (Accounts context, UserAuth plug, auth LiveViews, users migration) is retained so you can add a private/admin area later by uncommenting the scopes in lib/portfolio_template_web/router.ex. If you will never need it, it is safe to delete those modules, the pbkdf2_elixir dependency, and the users migration. There are no billing or background-job (Oban) dependencies.

Install

Requirements: Elixir >= 1.15 / OTP 25+, PostgreSQL 12+. Node is not required (esbuild/tailwind binaries are fetched by mix). Postgres is only used by the (optional) auth scaffolding — the portfolio content itself is code-defined.

mix setup           # deps, database, assets
mix phx.server      # visit http://localhost:4000

The dev/test database reads DB_PORT (default 5432) if your Postgres runs on a non-standard port.

Run the test suite:

mix test

Customize

All sample content lives in lib/portfolio_template_web/live/home_live/index.ex:

  1. Name, headline, description@name, @description, plus the headline text in home_live/index.html.heex.
  2. Experience — edit the @experiences list (title, employer, dates, description, tech stack, link).
  3. Projects — edit the @projects list. Images can be local files under priv/static/images/projects/ or external URLs.
  4. Contact form (EmailJS) — create a free EmailJS account and put your service ID, template ID, and public key into assets/js/mailer.js (placeholders are clearly marked: service_id_here, template_id_here, public_key_here). No server-side email is involved.
  5. Buy Me a Coffee — set buymeacoffee_id in HomeLive.Index.mount/3; the widget stays off while the id is empty.
  6. Social links — the sidebar icons point to #; set your profiles or remove them.

Deploy

Standard Phoenix release deployment. In production you must set:

  • DATABASE_URL (e.g. ecto://USER:PASS@HOST/DATABASE)
  • SECRET_KEY_BASE (generate with mix phx.gen.secret)
  • PHX_HOST, and PHX_SERVER=true when starting a release
mix assets.deploy
MIX_ENV=prod mix release

See the Phoenix deployment guides for platform specifics (Fly.io, Gigalixir, Docker, bare VMs).

Support & policies