Naming Conventions

How to name apps, files, tables, variables, and environment variables in the monorepo.

Consistent naming is how the monorepo stays navigable across 30+ apps. Follow these conventions when you create files, tables, or variables — and when in doubt, look at how existing apps do it.

Quick Reference

ItemConventionExample
App directorykebab-caseapps/checkin-board/
Database table (app-specific)snake_case, app-prefixedcheckin_board_checkin
Database table (shared)semantic prefixclass_user, log_activity
Component filePascalCase.tsxUserProfile.tsx
Utility filecamelCase.tsformatDate.ts
API route folderkebab-caseapp/api/user-profile/route.ts
Page route folderkebab-caseapp/user-settings/page.tsx
VariablecamelCaseuserName, totalCount
FunctioncamelCase (verb-noun)getUserData(), calculateTotal()
ConstantUPPER_SNAKE_CASEMAX_RETRY_ATTEMPTS
React HookuseCamelCaseuseUserData()
CSS classkebab-caseuser-card
Environment variableUPPER_SNAKE_CASEDATABASE_URL, AUTH_UI_URL
Package namekebab-case"name": "checkin-board"

Apps

Use kebab-case — lowercase, hyphen-separated:

  • checkin-board, breakfast-tracker, meal-planner
  • CheckinBoard, checkin_board, checkinBoard

The app directory, the name field in package.json, and the root scripts (dev:<app-name>, build:<app-name>, start:<app-name>) must all match.

Database Tables

App-specific tables are prefixed with the app name in snake_case:

{app_name}_{table_name}

Convert the app's kebab-case name to snake_case: checkin-boardcheckin_board_*.

AppExample table
checkin-boardcheckin_board_checkin
breakfast-trackerbreakfast_tracker_meal
meal-plannermeal_planner_recipe

Shared tables (used by multiple apps) use semantic prefixes instead: class_user, log_activity, map_*. See Database for the full schema workflow.

Environment Variables

Use UPPER_SNAKE_CASE. For app-specific GitHub secrets that map into Railway, prefix with the app name in snake_case:

  • BREAKFAST_TRACKER_SLACK_WEBHOOK_URL
  • RECRUIT_ASHBY_API_KEY
  • STAFF_MEAL_TRACKER_OPENAI_API_KEY

This keeps GitHub variables collision-free across 30+ apps. See Environment Variables for how these map to Railway.

Next.js public variables (exposed to the browser) prefix with NEXT_PUBLIC_NEXT_PUBLIC_API_URL.

Ask Claude

Check if a new name follows conventions
Claude prompt
I want to create a new app called "Meal Planner". What should the directory name, package name, table prefix, and GitHub secret prefix look like? Follow the monorepo naming conventions.

Quiz

Quiz

Which of these is the correct table name for a 'reservations' table in the 'checkin-board' app?