Personal website built with Next.js and TypeScript. It displays profile information, public GitHub repositories, and Medium articles.
Live site: https://rodrigocastilho.com/
Requires Node.js 24.x (.nvmrc) and Yarn.
nvm use
yarn install
yarn devBefore opening a pull request for application changes, run:
yarn lint && yarn prettier --check . && yarn typecheck && yarn buildyarn start is unsupported with static export. Serve out/ with a static file
server to inspect a production build. For Markdown-only changes, check
formatting and local links; no application build is needed.
- GitHub and Medium content is fetched at build time and included in the static export; it refreshes on a new build, not at request time.
- A failed GitHub request yields an empty project list. If Medium data is
unavailable or empty, the build uses
public/feed.xml. - Images are static assets and are not optimized by a server at runtime.
- The theme defaults to light and restores a saved preference.
.env.local is optional. Set NEXT_PUBLIC_GA_TRACKING_ID to enable Google
Analytics and the cookie-consent banner. When unset, neither is rendered. CI
reads the value from a GitHub Actions variable.
When enabled, Analytics loads with consent denied by default. Accepting grants analytics storage only; advertising consent remains denied.
Pushes to master or a manual dispatch run
.github/workflows/nextjs.yml, which checks,
builds, and deploys out/ to GitHub Pages. The custom domain is configured in
public/CNAME.
Never commit directly to master. Follow AGENTS.md
for the Git workflow.
- API overview:
public/docs/api.md; contract:public/docs/api/openapi.json - Authentication status:
public/auth.md; OAuth/OIDC is not implemented. - Discovery metadata:
public/.well-known/ - GitHub Pages ignores custom headers and rewrites. Fetch
/index.mddirectly instead of relying onAccept: text/markdownnegotiation.
AGENTS.md: project guide (structure, commands, conventions, verification, and constraints)DESIGN.md: architecture decisions and rationaleCLAUDE.md: Claude-specific setupSECURITY.md: vulnerability reporting