81e80c7e2f7c25ac9afbd921f7aafe70d6ef352a
Stop defaulting imports to CAD; map Blender to 3D Modeling and sculpt tools (Nomad/ZBrush) to 3D Sculpting.
jmartgraphix.com — Portfolio CMS
Single-container portfolio website: Fastify API + Vite/React SPA, backed by PostgreSQL and Typesense 30.2. Admin is protected by Authelia (Remote-User / Remote-Groups headers).
Architecture
Traefik (TLS) → jmartgraphix-com:3000
├── static SPA (public + /admin)
├── /api/v1/* (OpenAPI at /api/docs)
├── /uploads/*
└── /.well-known/* (matrix, webfinger)
Sidecars: Typesense
Shared: Postgres (catalog), optional imgproxy
| Path | Auth |
|---|---|
/, /portfolio/*, /resume, /api/v1/* (public) |
None |
/admin, /api/v1/admin/* |
Authelia forwardAuth → Remote-User |
Source of truth
- Gitea:
https://git.jmartgraphix.com/jmartin/jmartgraphix.com.git - Local clone:
/docker/jmartgraphix/hub/ - Host workspace
/docker/jmartgraphixis not the git root (uploads, typesense data, prompt live there)
Deploy loop
cd /docker/jmartgraphix/hub
git add -A && git commit -m "…" && git push origin master
cd /docker/komodo/periphery/stacks/jmartgraphix-com
docker compose up -d --build
Verify:
curl -s https://jmartgraphix.com/api/v1/health
docker logs jmartgraphix-com --tail 80
Look for: Database migrations applied, Typesense index, Server listening.
Environment
See .env.example. Stack secrets live in
/docker/komodo/periphery/stacks/jmartgraphix-com/.env.
ArtStation import
docker exec -it jmartgraphix-com \
npx tsx scripts/import-artstation.ts --user jmartgraphix
# dry run
docker exec -it jmartgraphix-com \
npx tsx scripts/import-artstation.ts --user jmartgraphix --dry-run
# single artwork
docker exec -it jmartgraphix-com \
npx tsx scripts/import-artstation.ts --url https://www.artstation.com/artwork/XXXX
Imported projects are drafts — review and publish in /admin.
Local development
cd /docker/jmartgraphix/hub
cp .env.example .env # set DATABASE_URL, REQUIRE_REMOTE_USER=false
npm install
npm run db:migrate -w server
npm run dev
Features
- Multi-category projects with media gallery, YouTube/Vimeo/self-hosted video
- Portfolio views (
/portfolio/game-dev,/portfolio/engineering, …) - Typesense search, filters, featured, sort by priority/date/title
- Editable resume + PDF download
- OpenAPI docs at
/api/docs - Sitemap
/sitemap.xml, RSS/rss.xml
Languages
TypeScript
88.9%
SCSS
9.2%
Dockerfile
1%
HTML
0.9%