A personal health & fitness framework monorepo focused on systematic meal prep and exercise tracking.
JoelFit is a personal reference implementation for my health and fitness routines. It's built with a focus on systematic organization, clear documentation, and maintainable code. This isn't a marketing site - it's a practical tool for personal use that can be shared when collaboration is needed.
- High-Protein Meal Prep OS: A systematic 5-day meal prep framework with 1-2-3 rotation
- Shoulder Program: Progressive rehab routine focusing on mobility, stability, and strength
- Container System: Standardized storage and portion control
- Quality Control: Temperature monitoring and food safety tracking
- Framework: Next.js 14 with App Router
- Language: TypeScript
- Styling: Tailwind CSS + CSS Variables
- UI Components: shadcn/ui
- Package Manager: pnpm
- Monorepo Tools: Turborepo
web
: Main Next.js application@repo/ui
: Shared React component library@repo/eslint-config
: ESLint configurations (includeseslint-config-next
andeslint-config-prettier
)@repo/typescript-config
: Sharedtsconfig.json
s used throughout the monorepo
Each package/app is 100% TypeScript.
joelfit/
├── apps/
│ └── web/ # Main Next.js application
│ ├── app/ # App router pages
│ ├── components/ # React components
│ ├── lib/ # Utility functions
│ ├── styles/ # Global styles
│ └── prompts/ # AI prompt templates
├── packages/ # Shared packages
│ ├── ui/ # Component library
│ ├── config/ # Shared configurations
│ └── tsconfig/ # TypeScript configs
└── tooling/ # Build and dev tools
This Turborepo has some additional tools already setup:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
- Use
type
for composition,interface
for extension - Zod for runtime validation
- No enums - use const objects with
as const
- Explicit return types on exported functions
- Leverage inference for internal implementation
- Server Components by default
use client
only when needed- Small, focused components
- React Query for client-side data
next-safe-action
for server actionsnuqs
for URL state management
- Server Components load their own data
- Pass data down as props
- No global state
- No unnecessary contexts
- URL state for navigation
- Tailwind first
- Mobile first
- Dark mode support
- CSS variables for theming
- Follow existing component patterns
-
Prerequisites
node >= 18.0.0 pnpm >= 8.0.0
-
Installation
pnpm install
-
Development
pnpm dev
-
Build
pnpm build
Turborepo can use Remote Caching to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines.
To enable Remote Caching:
npx turbo login
npx turbo link
- Main branch is protected
- Feature branches for development
- PRs require review
- Conventional commits required
feat: add new feature
fix: bug fix
docs: documentation changes
style: formatting, missing semi colons, etc
refactor: code change that neither fixes a bug nor adds a feature
test: adding tests
chore: maintain
- Group by feature when possible
- Keep related code close
- One component per file
- Colocate tests with code
- Use workspace protocols (
workspace:*
) - Hoist common dependencies
- Lock all workspace versions
- Document dependency decisions
- Keep package boundaries clean
- Share types, not implementations
- Build in dependency order
- No circular dependencies
- Unit test business logic
- Integration test critical paths
- E2E test user flows
- Mock external dependencies
- Lighthouse scores > 90
- Core Web Vitals monitoring
- Bundle size budgets
- Image optimization
- WCAG 2.1 AA compliance
- Semantic HTML
- Keyboard navigation
- Screen reader testing
Learn more about the power of Turborepo:
This is a personal project, but if you find issues:
- Create an issue describing the problem
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a PR with a clear description
MIT - Feel free to use this for your own personal projects.