Skip to content

website (0d4y.dev)

The website repository is a GitHub intelligence dashboard and developer portfolio for 0d4y.dev, driven entirely by live GitHub API data from the th30d4y account.

Language: TypeScript
Repository: github.com/th30d4y/website

TechnologyRole
Next.js 16App Router, server-side API routes
TypeScriptStrict mode
Tailwind CSS v4Utility-first styling
react-markdown + rehype-sanitizeSecure README rendering
Terminal window
npm install
cp .env.example .env.local
npm run dev

The development server runs at http://localhost:3000.

VariableRequiredPurpose
GITHUB_TOKENOptional (recommended)Raises rate limit from 60 to 5000 req/hr
NEXT_PUBLIC_SITE_URLOptionalCanonical URL for Open Graph metadata

Generate a token with public_repo read-only scope.

RouteDescription
/Homepage: stats, featured projects, activity
/projectsRepository explorer with search, filter, sort
/projects/[repo]Detail view: overview, commits, issues, PRs, contributors, files
/activityFull commit timeline
/api/github/*API routes for user, repos, activity, commits, README, contributors, file tree, issues, PRs
  • Terminal.tsx — Interactive shell with commands
  • ContributionGraph.tsx — GitHub-style contribution heatmap
  • LanguageStats.tsx — Bar chart and donut visualization
  • FeaturedProjects.tsx — Top repos ranked by scoring algorithm
  • MarkdownRenderer.tsx — Sanitized markdown with GFM support

Responses are cached in-memory per process:

ResourceTTL
User profile5 min
Repositories5 min
Commits3 min
Languages10 min
Contributors10 min
README15 min
File tree15 min

Serverless deployments maintain independent caches per instance.

  • Without token: 60 requests/hour
  • With GITHUB_TOKEN: 5000 requests/hour

A token is strongly advised because the repos route fetches languages for up to 20 repos in parallel.

Vercel (recommended):

Terminal window
npm i -g vercel
vercel --prod

Set GITHUB_TOKEN in the Vercel project environment settings.

Self-hosted:

Terminal window
npm run build
npm start

Runs on port 3000. Reverse proxy with nginx or Caddy.