Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/apursley2012/developer-dossier/llms.txt

Use this file to discover all available pages before exploring further.

The data/projects.js module exports the projects array consumed by the Projects page. Each entry represents a real or representative project formatted as a classified operational case file — complete with a codename, mission status, tech stack, and optional links to a live demo, source code, or a full case study dossier. Adding, removing, or editing a project is entirely data-driven: no component changes are required.

Project Schema

Each project conforms to the following interface. Required fields are id, title, codename, status, tech, description, and dataSource. All links sub-fields are optional.
interface Project {
  id: string;             // e.g. "prj-001"
  title: string;          // Display name shown on the project card
  codename: string;       // Operational codename in ALL CAPS
  status: 'SHIPPED' | 'ACTIVE' | 'HAUNTED' | 'DORMANT';
  tech: string[];         // Technology tags rendered as badges
  description: string;    // Short one-line description for the card
  fullDescription?: string; // Optional full paragraph for the detail / expanded view
  links: {
    demo?: string;        // URL to the live deployment
    source?: string;      // URL to the source repository
    writeup?: string;     // Path to a case study: "/case-studies/:id"
    readme?: string;      // URL to the README or external docs
  };
  dataSource: 'LIVE' | 'SAMPLE' | 'MOCKED';
}

Status Meanings

The status field signals the current operational state of the project. It maps to a ClassificationStamp badge on the project card.
StatusMeaning
SHIPPEDCompleted and deployed to production. Mission accomplished.
ACTIVECurrently in active development — expect changes.
HAUNTEDLegacy or problematic code that is still maintained. Touch with caution.
DORMANTRetired or paused. No active development; preserved for reference.

Current Projects

The portfolio currently documents four projects.
idTitleCodenameStatusTech Stack
prj-001Specter AnalyticsGHOST-TRACKSHIPPEDReact, TypeScript, Recharts, Node.js
prj-002Nexus SyncVOID-BRIDGEACTIVERust, WebSockets, Redis, React
prj-003Legacy API WrapperNECROMANCERHAUNTEDPython, FastAPI, SOAP, GraphQL
prj-004Terminal PortfolioECHO-DIRDORMANTVue, CSS Variables, Vite
Specter Analytics (prj-001) — A privacy-first analytics dashboard. dataSource: "LIVE". Links: demo, source, and writeup (/case-studies/specter). Includes a fullDescription for the expanded detail view. Nexus Sync (prj-002) — A real-time state synchronization engine built on Rust and WebSockets. dataSource: "SAMPLE". Links: source and readme only — no live demo available. Legacy API Wrapper (prj-003) — A modern GraphQL layer over a 20-year-old SOAP API. dataSource: "MOCKED". Links: source only. Status: HAUNTED — maintained but approached carefully. Terminal Portfolio (prj-004) — A previous portfolio site rendered as a fake CLI terminal. dataSource: "LIVE". Links: demo and source. Retired and preserved as a historical artifact.

Linking to a Case Study

To connect a project card to a full case study dossier, set the links.writeup field to the case study’s route path. The path segment after /case-studies/ must exactly match the id of the corresponding entry in data/caseStudies.js.
// In data/projects.js
{
  id: "prj-001",
  title: "Specter Analytics",
  // ...
  links: {
    writeup: "/case-studies/specter", // matches id: "specter" in caseStudies.js
  },
}
The Projects page component reads links.writeup and renders a View Case File button when the field is present. If writeup is omitted, the button is not displayed.
The dataSource field (LIVE, SAMPLE, MOCKED) is informational — it’s displayed as a stamp on the project card but has no functional effect on the app. Use it to signal to visitors how representative the data in a demo actually is.

Build docs developers (and LLMs) love