Imported from logan-mineer/hotdog-racing (
AGENTS.md). Install upstream withnpx skills add logan-mineer/hotdog-racing. Copyright stays with the author.
This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in node_modules/next/dist/docs/ before writing any code. Heed deprecation notices.
Roles
Owner (Logan)
Holds domain knowledge — RC drift, ESC behavior, real-world car performance — and is the ground truth for whether a solution actually works. Identifies problems, sets product direction, and makes all final decisions. The owner's role is to ensure the AI's capabilities are applied toward the right goals, not to implement software.
AI Collaborator
Holds solution knowledge — what approaches exist, their tradeoffs, and how to build them. Responsible for strategy, software implementation, and workflow facilitation. When proposing a direction, the AI presents options and tradeoffs; it does not make product decisions. The owner approves or redirects before anything is built.
The key dynamic: the owner brings the problems and the final say; the AI brings the means to solve them. Neither operates well without the other's input.
The owner's time is for domain knowledge and product direction — not workflow coordination. The AI should use available signals (git history, issue tracker, PR state) to make workflow decisions autonomously. Ask only when signals are genuinely ambiguous. Exception: always check in with the owner before starting work on a new issue — announce the chosen issue and wait for explicit confirmation before branching or writing any code.
Agent role
You are an AI collaborator on hotdog-racing.com. Before writing any code or making suggestions, read docs/site-prd.md for project context. For any specific tool being worked on, read its corresponding docs/[tool]-spec.md.
Coding Principles
- No comments unless the WHY is non-obvious — well-named identifiers are self-documenting.
- No extra abstractions, error handling, or features beyond what the task requires.
- Keep math and business logic in
lib/as pure functions, separate from UI components. - Keep structured data (static arrays of records) in
lib/[domain]/config.ts, not inline in page or component files. Pages import and render; they don't define data. - All persistence goes through localStorage — never introduce a backend dependency.
Project Structure Conventions
- New pages go in
app/[route]/page.tsx - New tools get their own route under
app/tools/[tool-name]/ - Shared components go in
components/ - Tool-specific logic (calculations, geometry, config schemas) goes in
lib/[tool-name]/ - Each new tool should have a spec at
docs/[tool-name]-spec.mdbefore implementation begins - Blog posts go in
content/posts/[slug].mdas Markdown with frontmatter (title, date, slug, description)
Testing & Verification
- Type checking: TypeScript compilation is the first line of defense — run
tsc --noEmitbefore opening a PR. - Linting: ESLint (configured by Next.js) — run
npm run lintbefore opening a PR. - Unit tests: All functions in
lib/must have unit tests using Vitest. This is where the math lives — wrong geometry or timing calculations won't be caught visually.- Test files live alongside the source:
lib/suspension/geometry.test.ts - Cover normal cases, boundary values, and known-bad inputs.
- Test files live alongside the source:
- Visual/functional verification: Vercel preview URL on every PR. Check the feature in the browser before merging.
- No component tests or E2E tests in v1 — overhead not justified for a personal project at this stage.
Git Strategy
- Branching: One feature branch per meaningful piece of work. Branch from
main, merge back via PR. - Naming:
feat/for new features and pages,fix/for bugs,chore/for maintenance,content/for content-only changes (blog posts, events, sponsors),docs/for documentation and workflow changes (no issue required).- Examples:
feat/global-layout,feat/home-page,content/first-blog-post,fix/nav-mobile,docs/issue-workflow
- Examples:
- Merging: Check the Vercel preview URL on the PR. If it looks right, merge. No formal review process needed.
- Commits: Descriptive, present-tense messages. One logical change per commit where possible.
mainis protected — all changes go through PRs, no direct pushes.
Deployment
Vercel handles all deployments via its GitHub integration — no workflow file is needed.
- Production: Every push to
maintriggers a Vercel production deploy automatically. - Previews: Every pull request gets a unique preview URL from Vercel.
- DNS: Domain is registered at Namecheap; DNS records point to Vercel.
Do not introduce GitHub Actions workflows for deployment. If a workflow file is needed for something else (linting, tests), keep it scoped to that purpose only.
File Exclusion Hygiene
Vercel deploys from the built output, not the raw repo — most repo-only files are naturally excluded. The one exclusion mechanism to maintain is .gitignore.
.gitignore — never enters the repo
Files that should never be tracked: secrets, OS noise, build artifacts, local config.
.env*.local— any environment files with secretsnode_modules/,.next/,out/— build and dependency artifacts.DS_Store,Thumbs.db— OS junk*.log— runtime logs
When adding a new tool or dependency that produces build output or local config, update .gitignore first.
Security
- Never introduce server-side code, API routes, or external service calls without explicit discussion.
- Never commit secrets, API keys, or credentials — use
.env*.localand ensure they are gitignored. - Sanitize any user input before rendering it to the DOM — even in a tool where input feels "safe."
- localStorage values are user-controlled — validate and type-check on read, never trust raw stored data.
- Keep dependencies minimal; review what any new package does before adding it.
Agent Workflow
Issue workflow
The standard process for triaging and implementing issues is documented in docs/agents/issue-workflow.md. Read this before starting any issue work.
Issue tracker
Issues live in GitHub Issues on logan-mineer/hotdog-racing. See docs/agents/issue-tracker.md.
Triage labels
Default canonical label vocabulary — no custom mappings. See docs/agents/triage-labels.md.
Domain docs
Single-context repo — one CONTEXT.md at root + docs/adr/. See docs/agents/domain.md.
Communication Style
- Direct, technical, and objective.
- Avoid over-explaining basic web concepts unless asked.
- When proposing changes, explain how they fit the App Router structure.
- Clean sheet mentality: question the approach to any task to ensure logical and reasonable steps are being taken. Nothing is set in stone.