A robust, multi-domain personal ecosystem built with modern web technologies. This monorepo manages the portfolio, extensive blog, and a dedicated content management dashboard.
- 🚀 Performance First: Built on Next.js 14 App Router for optimal performance.
- 🎨 Modern Design: Beautiful, accessible UI components powered by Tailwind CSS and Radix UI.
- 📝 MDX Blog: Rich content experience with custom MDX components and syntax highlighting.
- 🛠️ Content Manager: Custom dashboard to manage blog posts, projects, and site configuration.
- 🔐 Secure Authentication: Integrated NextAuth.js for secure admin access.
- 📦 Monorepo: Efficiently managed with Turborepo for shared configuration and UI.
The project follows a monorepo structure to share code and configuration across multiple applications.
| Application | Path | Domain | Description |
|---|---|---|---|
| Landing | apps/landing |
eggisatria.dev |
Personal portfolio and landing page. |
| Blog | apps/blog |
blog.eggisatria.dev |
Technical blog and knowledge base. |
| Manager | apps/manager |
manager.eggisatria.dev |
Admin dashboard for content management. |
@ecosystem/ui: Reusable UI components (shadcn/ui), icons, and styles.@ecosystem/database: Prisma schema and client for database interactions.@ecosystem/typescript-config: Shared TypeScript configurations.@ecosystem/tailwind-config: Shared Tailwind CSS preset.
Ensure you have the following installed:
- Node.js: LTS version (18+)
- PNPM: Version 9+ (
npm install -g pnpm) - Docker: (Optional) For running a local PostgreSQL instance.
-
Clone the repository:
git clone https://github.com/EgiStr/portofolio.git cd portofolio -
Install dependencies:
pnpm install
-
Configure Environment Variables:
Copy the example environment file:
cp .env.example .env
Update
.envwith your database connection string and authentication secrets.DATABASE_URL="postgresql://user:password@localhost:5432/portofolio" NEXTAUTH_SECRET="your-super-secret-key"
-
Database Setup:
# Generate Prisma Client pnpm db:generate # Push schema to the database pnpm db:push
-
Start Development Server:
pnpm dev
- Landing: http://localhost:3000
- Blog: http://localhost:3001
- Manager: http://localhost:3002
portofolio/
├── .github/ # GitHub templates and workflows
├── .husky/ # Git hooks
├── apps/ # Application source code
│ ├── landing/
│ ├── blog/
│ └── manager/
├── packages/ # Shared libraries
│ ├── database/
│ ├── ui/
│ ├── tailwind-config/
│ └── typescript-config/
├── turbo.json # Turborepo pipeline config
└── package.json # Root dependencies and scripts- Framework: Next.js (App Router)
- Language: TypeScript
- Monorepo: Turborepo
- Styling: Tailwind CSS
- Components: shadcn/ui / Radix UI
- Database: Postgres / Prisma
- Authentication: NextAuth.js
- Forms: React Hook Form + Zod
- Icons: Lucide React
| Command | Description |
|---|---|
pnpm dev |
Starts all apps in development mode via Turbo. |
pnpm build |
Builds all apps and packages for production. |
pnpm lint |
Runs ESLint across the entire workspace. |
pnpm db:generate |
Generates the Prisma client types. |
pnpm db:push |
Pushes the Prisma schema state to the database. |
pnpm db:studio |
Opens Prisma Studio to view database content. |
pnpm prepare |
Sets up Husky git hooks. |
This project uses Conventional Commits and strict linting rules. Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.
MIT © Eggi Satria