Skip to content

Repository files navigation

Dev Portfolio

Editorial portfolio for Tim Finch. Built with Next.js 16, TypeScript, and Tailwind CSS, it presents projects, writing, and current work with a restrained visual system and a content-first structure.

What It Includes

  • Editorial home page with featured projects and a lightweight space-data telemetry layer
  • Lead “Currently building” narrative for Nereid, with a case study and evidence-led build thread
  • Reusable, captioned content-image blocks for real project screenshots
  • Project archive with search and statically generated case studies
  • Writing archive with structured long-form entries and build threads
  • About page with a concise working profile, social links, and a public CV link
  • Lightweight API routes for portfolio search and telemetry fallback data

Visual System

The site uses a warm, low-contrast palette and a typographic hierarchy that keeps the experience focused and readable.

  • Warm paper background and near-black text
  • Muted supporting copy
  • Thin borders and soft translucent surfaces
  • Serif editorial headings paired with a clean sans-serif body stack
  • Rounded pill navigation and actions
  • Subtle hover and focus states

Tech Stack

  • Next.js 16 App Router
  • React 19
  • TypeScript
  • Tailwind CSS v4
  • Vercel Analytics

Content Model

Content lives in local data files so the site stays easy to update and statically render.

Nereid is the lead project. Its public writing follows completed milestones: kickoff and protocol evidence first, runner and hackathon posts only after those behaviors are publicly verifiable.

Telemetry Data

The home page telemetry panel uses a small server-side integration with the official JPL Horizons API when available. It requests heliocentric vector snapshots for Earth, Voyager 2, Mars Odyssey, Psyche, and Europa Clipper, then renders those positions in the minimalist SVG mission visual.

  • Live position data is labelled Live JPL Horizons data; partial Horizons responses are labelled Live JPL Horizons data (partial).
  • DSN communication status, signal lines, stations, and signal times remain simulated.
  • mockTelemetry remains the fallback source if Horizons is unavailable, slow, or returns no mission positions.
  • NASA Open APIs were reviewed, but their key-based public datasets are better suited to imagery, Mars rover photos, DONKI, NeoWs, EPIC, and APOD than this mission-position view.
  • DSN Now was reviewed as the official live DSN status product, but this project does not consume it because no stable documented JSON API is wired here.
  • No environment variables are required for the current Horizons integration.

Routes

  • / home
  • /projects project archive
  • /projects/[slug] project case studies
  • /writing writing archive
  • /writing/[slug] long-form writing entries
  • /about bio and links
  • /Tim_Finch_CV.pdf public CV asset
  • /api/ask local portfolio search endpoint
  • /api/telemetry telemetry feed with fallback content

Getting Started

npm install
npm run dev

Open http://localhost:3000 in your browser.

Set NEXT_PUBLIC_SITE_URL in production so canonical URLs and generated social cards resolve to the public portfolio domain.

Useful Scripts

npm run dev
npm run lint
npm run build
npm run start

Deployment

The site is designed for Vercel.

vercel
vercel --prod

Notes

  • The writing content is the source of truth for long-form editorial pages.
  • The project archive is generated from local data, so new entries should keep slugs stable.
  • Keep route and metadata changes in sync with the static content model.
  • See ARCHITECTURE.md for the system layout.
  • See CONTRIBUTING.md for the workflow.
  • See CHANGELOG.md for project updates.

License

MIT. See LICENSE.

About

Editorial portfolio built with Next.js 16, TypeScript, and Tailwind CSS, it presents projects, writing, and current work with a restrained visual system and a content-first structure.

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages