This document outlines the operational patterns, constraints, and architecture of the lenin-meza-portfolio repository to assist autonomous coding agents (like Google Antigravity) in future iterations.
Before modifying the codebase, ingest this document to maintain architectural purity and avoid breaking GitHub Pages compatibility.
This repository relies entirely on the GitHub Pages ecosystem. Because GitHub Pages does not execute server-side Node.js code at runtime, everything must compile as a static asset.
- Rule: Never introduce APIs, server actions, dynamic server rendering (
getServerSideProps), or non-static dependencies. - Enforcement:
next.config.tsforcesoutput: 'export'. Do not change this unless the hosting infrastructure migrates off GitHub Pages. - Image Optimization: Next.js default
next/imagerequires a server.next.config.tsenables{ unoptimized: true }specifically to prevent build failures. Maintain this configuration.
- Framework: Next.js 15+ (App Router).
- Styling: Tailwind CSS v4.
- Components: Shadcn/ui (Tailwind-based primitives).
- Interactions: Framer Motion (Scroll animations).
- Icons:
lucide-react.
The portfolio is designed for a Senior Software Architect / Technical Lead.
- Palette: "Deep Dark Mode" (
zinc-950). - Styling Directives: Utilize glassmorphism (
backdrop-blur-md bg-white/5orbg-zinc-900/40), glowing accents on critical path UI elements (nodes, specific text), and high-contrast typography. - Rule: Do not generate light mode. Do not inject brutalist, plain aesthetic blocks. Ensure any new element feels premium and cohesive with the Vibe Coding directives.
The deployment relies on .github/workflows/deploy.yml.
- Critical History Context: The standard GitHub Action setup (
actions/configure-pages) occasionally injects configurations that conflict with Next.js 15+ static exports. The workflow was deliberately modified to run the purenpm run buildcommand withoutnextoverriding hooks. - Rule: If the pipeline breaks, ensure you modify
deploy.ymland not just local configurations.
The user's professional profile is decoupled from the UI components to maintain strict, hallucination-free output.
- Location:
src/data/subject.ts. - Rule: If you are instructed to add a new job, skill, or certification, update
subject.tsdirectly. The UI components map this data dynamically. Do not hardcode biographical data directly intosrc/components/sections/.
- Run
npx shadcn@latest add [component]if a primitive is needed. - Build the specific UI section within
src/components/sections/. - Utilize
framer-motionfor entrance animations (initial,whileInView,viewport={{ once: true }}). - Add the component to
src/app/page.tsx. - Run
npm run devand spawn a browser subagent (localhost:3000) to visually confirm responsive alignment against the existing matrix.
If incorporating dynamic third-party libraries (e.g., specific heavy graph renderers or Lottie files) that conflict with Server Components or hydration in an output: 'export' environment, utilize Next.js dynamic imports with ssr: false:
import dynamic from 'next/dynamic';
const MyHeavyComponent = dynamic(() => import('@/components/Heavy'), { ssr: false });-
Prioritize Knowledge Graph:
- ALWAYS query
codebase-memoryMCP tools (search_graph,query_graph,trace,impact_analysis) BEFORE reading large source files or performing global greps. - Use
index_statusanddetect_changesto verify project graph freshness before starting structural tasks.
- ALWAYS query
-
LLM Wiki & Architecture Alignment:
- Always cross-reference architectural decisions with
LLM_WIKI.mdand validate code relationships using graph node signatures.
- Always cross-reference architectural decisions with
-
Post-Task Sync:
- After completing edits, run
detect_changesto ensure the codebase graph reflects all newly created or modified functions/routes.
- After completing edits, run