Source code for my personal website.
Production:
- Website: https://yuricunha.com
Please, use your own AI/Mascot nome and your own model/llm. Thanks.
- Project overview
- Repository layout
- Tech stack
- Local development
- Environment variables
- Scripts
- Deployment
- Contributing
- License
- Credits
- Contact
This is the source code for my personal website.
The repository is organized as a monorepo (Turbo + pnpm) so that the main app and internal packages can evolve together.
apps/
web/ main website
docs/ documentation site
packages/
db/ database access (Drizzle)
env/ env validation
emails/ email templates
i18n/ internationalization
ui/ shared UI components
utils/ shared utilities
...
- Runtime: Node.js (see
.nvmrc) - Package manager: pnpm (see
packageManagerinpackage.json) - Monorepo: Turborepo
- Web: Next.js App Router, React, TypeScript
- API: tRPC
- Database: PostgreSQL, Drizzle ORM
- Email: React Email, Resend
- i18n: next-intl (localized routes under
apps/web/src/app/[locale]) - Testing: Vitest (unit), Playwright (e2e)
- Node.js (aligned with
.nvmrc) - pnpm
- PostgreSQL (or a compatible managed provider)
-
Install dependencies
pnpm install
-
Create your local env file
cp .env.example .env.local
-
Initialize the database (optional, if you need DB features locally)
pnpm db:push
-
Start the dev servers
pnpm dev
This repository is actively maintained and dependencies across all apps and packages are updated regularly.
Recommended upgrade workflow:
pnpm -r up --latest
pnpm install
pnpm check
pnpm test:unit
pnpm buildIf upgrades introduce runtime issues, prefer debugging in development mode (pnpm dev:web) to get non-minified React errors.
Core tooling:
- Node.js:
>=22(seepackage.json#engines.node) - pnpm:
10.26.0(seepackage.json#packageManager) - TypeScript:
^5.9.3 - Turbo:
^2.7.1 - Vitest:
^4.0.16 - ESLint:
^9.39.2 - Prettier:
^3.7.4
Web apps:
- Next.js:
16.1.1 - React:
19.2.3 - Zod:
4.2.1 - tRPC:
11.8.1 - TanStack React Query:
^5.90.12 - TailwindCSS:
^4.1.18
To list all installed versions in the workspace:
pnpm -r list --depth 0Environment variables are documented in .env.example.
The canonical schema is defined in packages/env/src/index.ts.
For production URLs (used in emails, canonical links, etc.), set:
NEXT_PUBLIC_WEBSITE_URL="https://yuricunha.com"Common tasks:
pnpm dev
pnpm build
pnpm lint
pnpm type-check
pnpm test:unit
pnpm test:e2e
pnpm format:check
pnpm check:knipDatabase tasks:
pnpm db:check
pnpm db:generate
pnpm db:migrate
pnpm db:push
pnpm db:seed
pnpm db:studioThe project is designed to be deployed on Vercel.
Notes:
- Ensure all required environment variables are set.
- The monorepo uses Turbo pipelines; the default root
pnpm buildis the expected build command.
Common browser console messages:
Failed to load resource: net::ERR_BLOCKED_BY_CLIENTtypically indicates a browser extension (ad blocker/privacy tooling) is blocking a request.- Minified React errors in production builds are best debugged by reproducing the issue in development mode.
This is primarily a personal project.
If you want to contribute:
- Open an issue describing the change.
- Keep changes small and focused.
- Prefer tests for non-trivial logic.
See license.md.
This project began as an adaptation inspired by Nelson Lai's website and has evolved significantly since then.
Thank you to Nelson for the original inspiration.
- Email: me@yuricunha.com
- GitHub: https://github.com/isyuricunha
- Website: https://yuricunha.com