A beautiful, minimal link-in-bio tool built with Next.js 14, TypeScript, and Tailwind CSS.
- 🎨 Clean, minimal UI with smooth animations
- 🔐 Secure Google OAuth authentication
- 🔄 Real-time link management with drag-and-drop reordering
- 📊 Click tracking for links
- ⚡️ Optimized for speed and performance
- 🌗 Beautiful design with custom branding
- 🔍 SEO optimized
- 📱 Fully responsive design
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Database: PostgreSQL with Prisma ORM
- Authentication: NextAuth.js with Google OAuth
- Deployment: Node.js with PM2
- Server: Caddy (reverse proxy)
- Components: Custom components with shadcn/ui
- Node.js 18.17 or later
- PostgreSQL
- A Google OAuth application for authentication
- Clone the repository:
git clone git@github.com:Simsz/metinypm.git
cd metinypm
- Install dependencies:
npm install
- Create a
.env.local
file:
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/tinypm"
# NextAuth
NEXTAUTH_URL="http://localhost:3131"
NEXTAUTH_SECRET="your-secret-here"
# Google OAuth
GOOGLE_CLIENT_ID="your-client-id"
GOOGLE_CLIENT_SECRET="your-client-secret"
- Set up the database:
npx prisma generate
npx prisma db push
- Run the development server:
npm run dev
Visit http://localhost:3131
to see your application.
- Node.js 18.17 or later
- PM2 for process management
- Caddy web server
- PostgreSQL
- Git
- Set up your server and clone the repository:
mkdir -p /var/www
cd /var/www
git clone git@github.com:Simsz/metinypm.git
cd metinypm
- Install global dependencies:
npm install -g pm2
- Create
.env.production
:
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/tinypm"
# NextAuth
NEXTAUTH_URL="https://your-domain.com"
NEXTAUTH_SECRET="your-production-secret"
# Google OAuth
GOOGLE_CLIENT_ID="your-production-client-id"
GOOGLE_CLIENT_SECRET="your-production-client-secret"
- Configure Caddy (example configuration):
your-domain.com {
reverse_proxy localhost:3000
encode gzip
}
- Set up deployment script:
chmod +x deploy.sh
./deploy.sh
- Set up PM2 to run on startup:
pm2 startup
pm2 save
To update your production deployment:
cd /var/www/metinypm
./deploy.sh
metinypm/
├── app/
│ ├── api/ # API routes
│ ├── components/ # React components
│ ├── types/ # TypeScript types
│ └── [...]/ # Page routes
├── prisma/
│ └── schema.prisma # Database schema
├── public/ # Static files
└── lib/ # Utility functions
Variable | Description |
---|---|
DATABASE_URL |
PostgreSQL connection URL |
NEXTAUTH_URL |
Full URL of your site |
NEXTAUTH_SECRET |
Random string for session encryption |
GOOGLE_CLIENT_ID |
Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret |
While this is a personal project, issues and pull requests are welcome. Please follow the existing code style and add unit tests for any new or changed functionality.
None, all rights reserved.
Created by Zach Sims. Built with Next.js, Tailwind CSS, and other amazing open-source projects.
© TinyPM