{"id":50288463,"url":"https://github.com/codewithveek/penstack-blog","last_synced_at":"2026-05-28T04:03:42.076Z","repository":{"id":250380885,"uuid":"833108640","full_name":"codewithveek/penstack-blog","owner":"codewithveek","description":"Penstack is a modern, clean, and customizable blog platform built with Next.js, featuring robust analytics, user management, and content creation capabilities.","archived":false,"fork":false,"pushed_at":"2026-02-21T18:20:38.000Z","size":2844,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-22T00:12:31.945Z","etag":null,"topics":["drizzle-orm","nextjs","react","tidb","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codewithveek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-24T11:20:36.000Z","updated_at":"2025-09-24T20:19:53.000Z","dependencies_parsed_at":"2024-08-24T01:25:50.701Z","dependency_job_id":"7de43645-e537-41f7-bace-a6e1c5af5a3e","html_url":"https://github.com/codewithveek/penstack-blog","commit_stats":null,"previous_names":["lucky-victory1/nextjs-chakra-blog","lucky-victory/nextjs-chakra-blog","lucky-victory/penstack-blog","darkcodewrangler/penstack-blog","codewithveek/penstack-blog"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codewithveek/penstack-blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithveek%2Fpenstack-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithveek%2Fpenstack-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithveek%2Fpenstack-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithveek%2Fpenstack-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codewithveek","download_url":"https://codeload.github.com/codewithveek/penstack-blog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codewithveek%2Fpenstack-blog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33593402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["drizzle-orm","nextjs","react","tidb","typescript"],"created_at":"2026-05-28T04:03:41.070Z","updated_at":"2026-05-28T04:03:42.066Z","avatar_url":"https://github.com/codewithveek.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Penstack - Modern Blog Platform\n\nPenstack is a modern, clean, and customizable blog platform built with Next.js, featuring robust analytics, user management, and content creation capabilities.\n\n## 🌟 Features\n\n### Content Management\n\n- Rich text editor with TipTap integration\n- Markdown support\n- Dynamic table of contents generation\n- Post categorization and tagging\n- Draft and publishing workflow\n- Reading time calculation\n\n### Analytics\n\n- Comprehensive post view tracking\n- User engagement metrics\n- Device and browser analytics\n- Geographic tracking\n- Weekly/monthly growth statistics\n- Customizable date range analytics\n- Integration with Mixpanel, Google Analytics, and Google Tag Manager\n\n### User Management\n\n- Role-based access control\n- Permission system\n- User authentication (NextAuth.js)\n- Email verification\n- Profile management\n\n### Technical Features\n\n- Server-side rendering with Next.js\n- TiDB (MySQL compatible) database with Drizzle ORM\n- TypeScript support\n- API rate limiting\n- Secure encryption handling\n- Responsive design with Chakra UI\n- Real-time data updates with React Query\n\n## 🚀 Getting Started\n\n1. Clone the repository\n\n```bash\ngit clone \u003crepository-url\u003e\ncd penstack-blog\n```\n\n2. Install dependencies:\n\n```bash\nnpm install\n```\n\n3. Set up your environment variables:\n\n```bash\ncp .env.example .env\n```\n\n4. Initialize the database:\n\n```bash\nnpm run db:setup\n```\n\n5. Start the development server:\n\n```bash\nnpm run dev\n```\n\nVisit [http://localhost:3000](http://localhost:3000) to see your application.\n\n## 📊 Database Setup\n\nThe project uses MySQL with Drizzle ORM. Available database commands:\n\n```bash\nnpm run db:push     # Push schema changes\nnpm run db:migrate  # Run migrations\nnpm run db:gen      # Generate migration files\nnpm run db:create   # Create database\nnpm run db:seeds    # Seed initial data\nnpm run db:setup    # Complete setup\n```\n\n## 🔐 Security\n\n- Built-in XSS protection\n- CSRF protection\n- Secure session handling\n- Encrypted sensitive data\n- Rate limiting on API routes\n\n## 🛠️ Project Structure\n\n```\nsrc/\n├── app/              # Next.js app directory\n├── components/       # React components\n├── db/              # Database schemas and config\n├── lib/             # Utility libraries\n├── utils/           # Helper functions\n└── types/           # TypeScript definitions\n```\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## 🔧 Configuration\n\nThe platform can be configured through the admin dashboard, including:\n\n- Site settings\n- Analytics preferences\n- Email configuration\n- User roles and permissions\n- Content moderation settings\n\n## 📚 Documentation\n\nFor more detailed documentation about specific features:\n\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Chakra UI Documentation](https://chakra-ui.com/docs/getting-started)\n- [TipTap Editor Documentation](https://tiptap.dev/docs)\n\n## 🌐 Environment Variables\n\nCreate a `.env` file with the following variables:\n\n```env\n# Database\nDB_PORT=3306\nDB_USER_NAME=your_username # Required\nDB_USER_PASS=your_password # Required\nDB_HOST=localhost # Required\nDB_NAME=penstack_db # Required\nDB_SSL_CONFIG={\"rejectUnauthorized\": true}\n\n# Site URL\nNEXT_PUBLIC_SITE_URL=http://localhost:3000\n\n# Authentication\nNEXTAUTH_SECRET=your_nextauth_secret # Required\nNEXTAUTH_URL=http://localhost:3000\nGOOGLE_CLIENT_ID= # Required\nGOOGLE_CLIENT_SECRET= # Required\nADMIN_EMAIL= # Required\nADMIN_PASSWORD= # Required\n```\n\n## 🚀 Deployment\n\nThe project supports deployment on both Vercel and Netlify platforms, with automatic environment configuration.\n\n### Automatic Environment Configuration\n\nThe `next.config.mjs` automatically handles the site URL configuration based on the deployment platform:\n\n- On Vercel: Uses `VERCEL_PROJECT_PRODUCTION_URL` (automatically set)\n- On Netlify: Uses `URL` (automatically set)\n- Local Development: Defaults to `http://localhost:3000`\n\n### Deployment Options\n\n1. **Vercel (Recommended)**\n\n   - Deploy directly from your GitHub repository using [Vercel Platform](https://vercel.com/new)\n   - Vercel will automatically detect your Next.js project and configure the build settings\n   - No additional URL configuration needed\n\n2. **Netlify**\n\n   - Deploy using the [Netlify Platform](https://app.netlify.com/start)\n   - Netlify will automatically configure the site URL\n   - No additional URL configuration needed\n\n3. **Custom Domain**\n   - After deployment, you can configure a custom domain on either platform\n   - The site URL will automatically update to match your custom domain\n\nFor more detailed deployment instructions, refer to:\n\n- [Next.js Deployment Documentation](https://nextjs.org/docs/deployment)\n- [Vercel Documentation](https://vercel.com/docs)\n- [Netlify Documentation](https://docs.netlify.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodewithveek%2Fpenstack-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodewithveek%2Fpenstack-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodewithveek%2Fpenstack-blog/lists"}