lui.z the true human agent.
Trained over 3.7 decades on production incidents, questionable dashboards, network cables, CI pipelines, cloud bills, human emotions, and the occasional moral judgment.
This repository powers justanother.engineer: a cyberpunk-styled personal site that treats Luiz F. C. Martins like a highly opinionated SRE/DevOps model you can deploy into teams, platforms, incidents, and awkward architecture meetings.
Under the joke: career history, public recommendations, operating style, sponsorship options, contact paths, and enough blinking yellow to void at least one design warranty.
- Astro 6 static site
- Tailwind CSS 4 with CSS-first theme tokens
- TypeScript
- Lucide Astro icons
- Cloudflare Pages
- Cloudflare Pages Functions for the public lui.z clone chat API
- Cloudflare KV for chat rate limiting
- Cloudflare Workers/CDN for public media
- OCI Object Storage for large media files
- GitHub Actions CI/CD with Doppler-synced secrets
Requires Node.js 22.12.0 or newer.
-
Install dependencies.
npm ci
-
Install local Git hooks.
npm run prepare
-
Start the development server.
npm run dev
-
Open the local URL printed by Astro, usually
http://localhost:4321. -
Edit content or components.
- Portfolio data:
src/config/portfolio/ - Page sections:
src/components/landing/ - Chat API logic:
src/server/chat/ - Cloudflare Pages Functions:
functions/ - Global layout, SEO, analytics:
src/layouts/Layout.astro - Theme tokens and global effects:
src/styles/global.css - Static passthrough assets:
public/ - Astro-optimized image assets:
src/assets/
- Portfolio data:
-
Run the full local gate before pushing.
npm run check
-
Preview the production build if the change affects layout, assets, SEO, or deployment behavior.
npm run preview
Common commands:
| Command | Purpose |
|---|---|
npm ci |
Install locked dependencies |
npm run prepare |
Install Lefthook Git hooks |
npm run dev |
Start local dev server |
npm run lint |
Run ESLint |
npm run typecheck |
Run Astro diagnostics |
npm run test:run |
Run unit tests once |
npm run build |
Build static output into dist/ |
npm run check |
Run lint, typecheck, tests, and build |
npm run preview |
Preview the production build locally |
src/pages/index.astro page composition
src/components/landing/ landing page sections
src/components/branding/ custom brand mark
src/components/icons/ local social icons
src/config/portfolio.ts portfolio content exports
src/config/portfolio/ structured content by domain
src/server/chat/ chat prompt, public facts, NIM client, rate limit logic
src/types/portfolio.ts shared content types
src/layouts/Layout.astro SEO, metadata, analytics, global scripts
src/styles/global.css Tailwind theme tokens and global effects
functions/api/chat.ts Cloudflare Pages Function for the chat endpoint
public/ static passthrough assets
.github/workflows/ci.yml Cloudflare Pages build and deploy
Most editable portfolio content lives in src/config/portfolio/, split by domain. src/config/portfolio.ts is the public export surface for components. Components should render that data, not duplicate it. Images that need Astro optimization belong in src/assets/; files that must be served unchanged belong in public/.
CI runs on pushes and pull requests targeting main. It builds the static site with production canonical settings, uploads dist/, and deploys through Wrangler to the Cloudflare Pages project jae-pages.
- Production:
https://justanother.engineer - Preview: Cloudflare Pages preview deployment posted automatically as a PR comment
- Canonical build env:
SITE_URL=https://justanother.engineer,SITE_BASE=/
Cloudflare Pages, DNS, and the media.justanother.engineer Worker are managed outside this repo in the conCIerge Terraform Cloudflare root. Secrets for the production and review GitHub environments are synced from Doppler project pages.
The chat endpoint uses the Doppler-synced GitHub environment secret NVIDIA_NIM_TOKEN. CI validates that secret, writes it to the matching Cloudflare Pages runtime environment with wrangler pages secret put, then deploys. The endpoint also requires a Cloudflare KV binding named RATE_LIMIT_KV; that namespace and Pages binding are owned by the conCIerge Terraform Cloudflare root.
The floating lui.z clone chat is intentionally constrained. It must state that it is not the biological lui.z, only a limited artificial clone, and it answers from public-site facts derived from the portfolio content, FAQ, reviews, deployment history, benchmarks, and the page's satirical human-agent framing. The server-side API calls NVIDIA NIM model openai/gpt-oss-120b and never exposes NVIDIA_NIM_TOKEN to client JavaScript.
This repo does not persist chat messages. The chat endpoint sends each message to NVIDIA NIM for inference and stores only a short-lived hashed client identity in Cloudflare KV for rate limiting. Visitors are warned not to submit secrets, private data, credentials, employer-confidential information, or personal information.
Large public media should not be committed to this repo. Upload it to the OCI Object Storage media bucket managed by the conCIerge Terraform OCI root, then serve it through https://media.justanother.engineer. The current promo video default is https://media.justanother.engineer/lui-z-promo.mp4.
MIT.
