26 Commits
Author SHA1 Message Date
jmartin e783fbd846 Fix dogfood pass-2: grid thumbs, AI view, featured/recent dedupe
- Portfolio cards: eager first-page load, cache-safe onLoad via ref,
  soft opacity while loading, error placeholder (no stuck black voids)
- Hide home view chips when primary category has zero projects (AI)
- Seed AI view with showOthers false; home Recent excludes Featured
- Slightly larger scroll-padding under sticky header
2026-08-05 11:59:06 -04:00
jmartin a2cec1baf1 Fix dogfood QA: 404, content hygiene, grid UX, a11y, CTAs
- Add branded NotFound catch-all (no more blank unknown routes)
- Portfolio cards: shimmer skeleton, eager first-row thumbs, real alts
- Hide empty categories; rename CAD view slug to avoid collision
- Resume summary preserves paragraphs/bullets
- Home/About/footer hire contact mailto CTA
- Sticky header scroll-padding; chip aria-labels
- Security headers; Flickr import strip View On Black + junk tags
- Content cleanup script for grammar, residue, tags, featured
2026-08-04 16:14:24 -04:00
jmartin 0a53ed3d4a Remove ArtStation link from top nav (keep in footer) 2026-08-01 11:53:42 -04:00
jmartin bf2732c936 Project chronological date: YMD admin, month/year public, sort/recent
- Serialize and save project.date as date-only YYYY-MM-DD (no TZ drift)
- Admin label + hint; projects list shows Date column
- Home Recent and portfolio date sort use project.date (nulls last)
- Public display stays month+year / year-only via safe formatters
2026-08-01 11:50:17 -04:00
jmartin af4e658e72 Load home portfolio views from API; improve resume PDF layout
Stop hardcoding deleted audience views and re-seeding them on boot.
Tighten resume print CSS with professional fonts and page-break rules
for a cleaner 1–2 page Letter PDF.
2026-08-01 11:28:51 -04:00
jmartin c4ecc934e9 Fix admin DELETE requests empty JSON body error 2026-07-24 13:40:23 -04:00
jmartin 8c8e7a4fb5 Fix VimeoEmbed TypeScript player instance types 2026-07-24 12:25:25 -04:00
jmartin 738187d1d4 Always embed Vimeo first; link out only on player error
Prefer on-site player.vimeo.com embeds. Use the Vimeo Player API to
detect privacy blocks and fall back to Watch on Vimeo only then.
2026-07-24 12:24:47 -04:00
jmartin 1b29b1d104 Handle Vimeo embed privacy for non-embeddable clips
O3r and future imports with embed_privacy=nowhere show a poster
link to Vimeo instead of a blocked iframe player.
2026-07-24 12:21:03 -04:00
jmartin b924ca8a62 Add Vimeo video import with embeds and admin re-run
Import public videos from jmartgraphix as Video (and 3D Animation
when relevant), with player embeds, thumbnails, and dashboard UI.
2026-07-24 12:13:23 -04:00
jmartin 6ff7fde867 Replace header logo image with jmartgraphix text 2026-07-24 12:05:17 -04:00
jmartin 020381c3a0 Add clickable column sorting for admin tags list 2026-07-24 11:59:15 -04:00
jmartin b1ef0d139a Make admin tags list searchable and paginated
Filter by name, used/unused, show project counts, and purge unused
tags so the page stays manageable at scale.
2026-07-24 11:55:33 -04:00
jmartin a575040217 Add edit flow for portfolio views in admin
Load existing views into the form to change name, slug, description,
category priority order, show-others, and active flags.
2026-07-24 11:47:46 -04:00
jmartin ff37533037 Add Flickr photostream import as Photography
Import public photos from samuraijkm (NSID resolve + Flickr REST),
tag Photography, with admin UI re-run and CLI support.
2026-07-24 11:35:57 -04:00
jmartin f29efb7924 Hard-filter /portfolio/:slug when it matches a category
Category chips (e.g. /portfolio/photography) now show only that
category — empty if none. Audience views like /portfolio/game-dev
still use prioritization.
2026-07-24 11:19:47 -04:00
jmartin 36c008ac26 Fix browser tab titles on every route
Add usePageTitle so public and admin pages set document.title
to the current page (e.g. Portfolio · jmartgraphix).
2026-07-24 10:56:34 -04:00
jmartin cef5738044 Add admin UI for ArtStation re-import
Expose import as a background admin job with status polling, dry-run
and optional publish; share logic with the CLI via a service module.
2026-07-24 10:52:11 -04:00
jmartin 1ce004ffd5 Remove black box behind transparent logo PNG 2026-07-24 10:38:02 -04:00
jmartin 3ccb44a729 Scale hero logo up to ~200px (responsive clamp) 2026-07-24 10:35:44 -04:00
jmartin 7cc397fd1c Increase hero logo to 120px 2026-07-24 10:31:46 -04:00
jmartin 346b095d3a Drop redundant jmartgraphix wordmark next to logo
Hero shows logo + tagline only; header is logo-only for a11y.
2026-07-24 10:28:40 -04:00
jmartin d950092772 Add jmartgraphix logo, favicons, and social share image
Place brand mark in header, footer, and hero; ship PNG favicons,
apple-touch icon, PWA manifest, and 1200×630 Open Graph card.
2026-07-24 10:23:51 -04:00
jmartin 6340dc5df9 Harden admin visibility probe against Authelia LAN bypass
Require GET /admin and /api/v1/admin/me so anonymous internal
clients do not see the Admin link.
2026-07-24 08:59:12 -04:00
jmartin af5bfc1b75 Show Admin nav only when GET /admin succeeds
Probe Authelia-protected /admin with credentials; keep the public
site free of admin links for anonymous visitors.
2026-07-24 08:48:20 -04:00
jmartin 43928f7a49 Initial portfolio CMS: Fastify API + Vite SPA
Single-container app with Postgres catalog, Typesense search,
Authelia Remote-User admin, portfolio views, resume/PDF, media
uploads, and ArtStation import tooling.
2026-07-23 17:01:34 -04:00