{"id":30091884,"url":"https://github.com/bartoszjarocki/minimal","last_synced_at":"2025-08-09T07:53:23.400Z","repository":{"id":303123889,"uuid":"592802405","full_name":"BartoszJarocki/minimal","owner":"BartoszJarocki","description":"Minimal - minimalist calendars and habit trackers","archived":false,"fork":false,"pushed_at":"2025-07-05T20:25:40.000Z","size":1311,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-05T21:30:35.912Z","etag":null,"topics":["bun","nextjs","react","typescript"],"latest_commit_sha":null,"homepage":"https://useminimal.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BartoszJarocki.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-01-24T15:13:43.000Z","updated_at":"2025-07-05T20:25:44.000Z","dependencies_parsed_at":"2025-07-05T21:41:01.913Z","dependency_job_id":null,"html_url":"https://github.com/BartoszJarocki/minimal","commit_stats":null,"previous_names":["bartoszjarocki/minimal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BartoszJarocki/minimal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BartoszJarocki%2Fminimal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BartoszJarocki%2Fminimal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BartoszJarocki%2Fminimal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BartoszJarocki%2Fminimal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BartoszJarocki","download_url":"https://codeload.github.com/BartoszJarocki/minimal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BartoszJarocki%2Fminimal/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269548496,"owners_count":24436109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-09T02:00:10.424Z","response_time":111,"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":["bun","nextjs","react","typescript"],"created_at":"2025-08-09T07:53:22.561Z","updated_at":"2025-08-09T07:53:23.369Z","avatar_url":"https://github.com/BartoszJarocki.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Minimal - Minimalist Calendar Generator\n\nA modern, type-safe web application for generating beautiful minimalist printable calendars and habit trackers. Built with Next.js, TypeScript, and Tailwind CSS.\n\n## ✨ Features\n\n- **🗓️ Minimalist Calendars**: Generate clean, printable calendars for any year\n- **📊 Habit Trackers**: Create customizable habit tracking sheets\n- **🌍 Multi-language Support**: Available in 25+ languages\n- **📄 Multiple Formats**: A4, A5, and Letter sizes in portrait/landscape\n- **🎨 Beautiful Design**: Clean, minimal aesthetic optimized for printing\n- **♿ Accessible**: ARIA labels, keyboard navigation, and screen reader support\n- **⚡ Performance**: Optimized with React.memo, error boundaries, and proper TypeScript\n\n## 🏗️ Architecture\n\nThis project is a **Turborepo monorepo** with the following structure:\n\n### Apps\n\n- **`apps/frontend`**: Next.js web application for calendar preview and generation\n- **`apps/generator`**: Puppeteer-based PDF generation service\n- **`apps/robot`**: Placeholder for future automation tasks\n\n### Packages\n\n- **`packages/config`**: Shared configuration for locales, themes, and calendar settings\n\n## 🚀 Quick Start\n\n### Prerequisites\n\n- Node.js 14+ \n- Yarn 1.22+\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone \u003crepository-url\u003e\ncd minimal\n\n# Install dependencies\nyarn install\n\n# Copy environment variables\ncp .env.example .env.local\n\n# Start development server\nyarn dev\n```\n\n### Environment Variables\n\nCreate a `.env.local` file in the root directory:\n\n```bash\n# Required\nSITE_URL=https://useminimal.com\n```\n\n## 📦 Available Scripts\n\n### Root Commands\n\n```bash\nyarn dev          # Start all apps in development mode\nyarn build        # Build all apps for production\nyarn lint         # Lint all apps\nyarn format       # Format code with Prettier\nyarn test         # Run all tests\nyarn test:watch   # Run tests in watch mode\nyarn test:coverage # Run tests with coverage report\nyarn generate     # Generate calendar PDFs (requires frontend running)\n```\n\n### App-specific Commands\n\n**Frontend** (`apps/frontend`):\n```bash\ncd apps/frontend\nyarn dev          # Start Next.js dev server\nyarn build        # Build for production\nyarn test         # Run Jest tests\nyarn test:watch   # Run tests in watch mode\nyarn test:coverage # Run tests with coverage\n```\n\n**Generator** (`apps/generator`):\n```bash\ncd apps/generator\nyarn generate     # Generate calendar PDFs\n```\n\n## 🧪 Testing\n\nThe project includes comprehensive testing setup:\n\n- **Jest** for unit testing\n- **React Testing Library** for component testing\n- **Coverage reporting** with thresholds\n- **Accessibility testing** with jest-axe\n\n```bash\n# Run all tests across the monorepo\nyarn test\n\n# Run tests in watch mode\nyarn test:watch\n\n# Generate coverage report\nyarn test:coverage\n```\n\n## 🌐 Supported Languages\n\nThe application supports 25+ languages including:\n\nEnglish, French, German, Spanish, Italian, Portuguese, Polish, Latvian, Norwegian, Czech, Ukrainian, Croatian, Slovak, Slovenian, Thai, Danish, Dutch, Finnish, Icelandic, Hungarian, Romanian, Swedish, Turkish, Russian, Korean, Hindi, Greek, Arabic, Hebrew, Japanese, Chinese\n\n## 🎨 Calendar Generation\n\n### Development Workflow\n\n1. **Frontend** serves calendar previews at `http://localhost:3000`\n2. **Generator** uses Puppeteer to capture calendar renders\n3. PDFs are generated for all supported languages and formats\n4. Output is organized and zipped for distribution\n\n### Supported Outputs\n\n- **Formats**: A4, A5\n- **Orientations**: Portrait, Landscape  \n- **Types**: Monthly calendars, Yearly overviews, Habit trackers\n- **Languages**: 25+ locales with proper date formatting\n\n## 🛠️ Technology Stack\n\n### Frontend\n- **Next.js 13** - React framework with App Router\n- **TypeScript** - Type-safe development\n- **Tailwind CSS** - Utility-first styling\n- **Radix UI** - Accessible component primitives\n- **Luxon** - Date manipulation and internationalization\n\n### Development\n- **Turborepo** - Monorepo build system\n- **ESLint** - Code linting\n- **Prettier** - Code formatting\n- **Jest** - Testing framework\n- **React Testing Library** - Component testing\n\n### Production\n- **Puppeteer** - PDF generation\n- **Vercel** - Deployment platform\n- **Vercel Analytics** - Performance monitoring\n\n## 📁 Project Structure\n\n```\n├── apps/\n│   ├── frontend/           # Next.js web application\n│   │   ├── src/\n│   │   │   ├── components/ # React components\n│   │   │   ├── pages/      # Next.js pages\n│   │   │   ├── lib/        # Utilities and configuration\n│   │   │   └── styles/     # Global styles\n│   │   ├── __tests__/      # Test files\n│   │   └── public/         # Static assets\n│   ├── generator/          # PDF generation service\n│   └── robot/              # Future automation\n├── packages/\n│   └── config/             # Shared configuration\n├── .env.example            # Environment variables template\n├── turbo.json              # Turborepo configuration\n└── CLAUDE.md               # AI assistant context\n```\n\n## 🔧 Configuration\n\n### Adding New Languages\n\n1. Add locale configuration to `packages/config/config.ts`\n2. Test calendar rendering in all formats\n3. Update language list in README\n\n### Adding New Themes\n\n1. Create theme component in `apps/frontend/src/components/calendar/themes/`\n2. Add theme to configuration\n3. Update theme lookup in print page\n\n## 🚀 Deployment\n\n### Vercel (Recommended)\n\nThe application is optimized for Vercel deployment:\n\n```bash\n# Deploy to Vercel\nvercel\n\n# Or connect GitHub repository for automatic deployments\n```\n\n### Manual Deployment\n\n```bash\n# Build all apps\nyarn build\n\n# Deploy frontend app from apps/frontend/.next\n# Deploy generator as serverless function or container\n```\n\n## 🤝 Contributing\n\n1. **Fork** the repository\n2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)\n3. **Commit** your changes (`git commit -m 'Add amazing feature'`)\n4. **Push** to the branch (`git push origin feature/amazing-feature`)\n5. **Open** a Pull Request\n\n### Development Guidelines\n\n- **TypeScript**: Strict mode enabled, no `any` types\n- **Testing**: Write tests for new components and utilities\n- **Accessibility**: Include ARIA labels and keyboard navigation\n- **Performance**: Use React.memo and useMemo for expensive operations\n- **Security**: No hardcoded secrets, validate all inputs\n\n## 📊 Performance\n\n- **Lighthouse Score**: 95+ across all metrics\n- **Core Web Vitals**: Optimized for LCP, FID, and CLS\n- **Bundle Size**: Analyzed and optimized with tree shaking\n- **Error Handling**: Comprehensive error boundaries\n\n## 🔒 Security\n\n- **Input Validation**: All user inputs validated\n- **XSS Prevention**: Proper escaping and sanitization\n- **CSRF Protection**: Built-in Next.js protection\n- **Environment Variables**: Secrets properly managed\n- **Dependencies**: Regularly updated and audited\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n**Made with ❤️ for the minimalist community**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartoszjarocki%2Fminimal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbartoszjarocki%2Fminimal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartoszjarocki%2Fminimal/lists"}