An event organizer platform that helps organizations create, manage, and promote events while connecting people through shared experiences.
- Event Management: Create and manage events with RSVP functionality
- Organization System: Organizations can host multiple events and manage members
- User Authentication: Secure registration and login system with session management
- Event Discovery: Explore events happening in your area
- Member Management: Handle organization memberships and event organizers
- RSVP System: Attendee management with capacity limits and RSVP deadlines
- Frontend: SvelteKit (Svelte 5) with Skeleton UI + Tailwind CSS
- Backend: Cloudflare Workers for serverless hosting
- Database: Cloudflare D1 (SQLite) with Drizzle ORM + Cloudflare KV
- Build:
pnpm build - Lint/Format:
pnpm lint(prettier + eslint) - Tests:
pnpm test(unit + e2e),pnpm test:unit,pnpm test:e2e - Single test:
pnpm test:unit path/to/test.tsornpx playwright test path/to/test.ts - Dev server:
pnpm dev - Type check:
pnpm check - DB operations:
pnpm db:generate,pnpm db:migrate,pnpm db:studio
src/
├── lib/
│ ├── db/ # Database schema and connection
│ ├── repos/ # Data access layer
│ └── utils/ # Utility functions
├── routes/
│ ├── (auth)/ # Authentication pages
│ ├── explore/ # Event and org explore page
│ ├── settings/ # Nested User/org settings
│ ├── org/[slug]/ # Org pages
│ ├── event/[slug]/ # Event pages
│ └── api/ # API endpoints
└── app.html # Main HTML template
The platform includes the following main entities:
- Users: User accounts with authentication
- Organizations: Event hosting organizations
- Events: Event details, dates, and capacity management
- Attendees: RSVP tracking
- Sessions: User session management
- Incremental progress over big bangs - Small changes that compile and pass tests
- Learning from existing code - Study and plan before implementing
- Pragmatic over dogmatic - Adapt to project reality
- Clear intent over clever code - Be boring and obvious
- Single responsibility per function/class
- Avoid premature abstractions
- No clever tricks - choose the boring solution
- If you need to explain it, it's too complex
Break complex work into 3-5 stages.
## Stage N: [Name]
**Goal**: [Specific deliverable]
**Success Criteria**: [Testable outcomes]
**Tests**: [Specific test cases]
**Status**: [Not Started|In Progress|Complete]- Understand - Study existing patterns in codebase
- Test - Write test first (red)
- Implement - Minimal code to pass (green)
- Refactor - Clean up with tests passing
- Commit - With clear message (conventional commit) linking to plan
CRITICAL: Maximum 3 attempts per issue, then STOP.
-
Document what failed:
- What you tried
- Specific error messages
- Why you think it failed
-
Research alternatives:
- Find 2-3 similar implementations
- Note different approaches used
-
Question fundamentals:
- Is this the right abstraction level?
- Can this be split into smaller problems?
- Is there a simpler approach entirely?
-
Try different angle:
- Different library/framework feature?
- Different architectural pattern?
- Remove abstraction instead of adding?
- Formatting: Tabs, single quotes, 100 char width, no trailing commas
- TypeScript: Strict mode enabled, explicit types preferred
- Imports: Node.js imports use
node:prefix, relative imports for local files - Naming: camelCase for variables/functions, PascalCase for components/types
- Database: Drizzle ORM with schema-first approach, UUID primary keys
- Error handling: Fail fast with descriptive messages, include context
- Components: Svelte 5 with runes, Skeleton UI + Tailwind CSS
- Composition over inheritance - Use dependency injection
- Interfaces over singletons - Enable testing and flexibility
- Explicit over implicit - Clear data flow and dependencies
- Test-driven when possible - Never disable tests, fix them
- Repository pattern for data access (
src/lib/repos/) - Utility functions in
src/lib/utils/ - Route-based organization with
+page.server.tsfor server logic - Session-based auth with secure password hashing (scrypt + salt)
-
Every commit must:
- Compile successfully
- Pass all existing tests
- Include tests for new functionality
- Follow project formatting/linting
-
Before committing:
- Run formatters/linters
- Self-review changes
- Ensure commit message explains "why"
When multiple valid approaches exist, choose based on:
- Testability - Can I easily test this?
- Readability - Will someone understand this in 6 months?
- Consistency - Does this match project patterns?
- Simplicity - Is this the simplest solution that works?
- Reversibility - How hard to change later?
- Find 3 similar features/components
- Identify common patterns and conventions
- Use same libraries/utilities when possible
- Follow existing test patterns
- Use project's existing build system
- Use project's test framework
- Use project's formatter/linter settings
- Don't introduce new tools without strong justification
- Tests written and passing
- Code follows project conventions
- No linter/formatter warnings
- Commit messages are clear
- Implementation matches plan
- No TODOs without issue numbers
- Test behavior, not implementation
- One assertion per test when possible
- Clear test names describing scenario
- Use existing test utilities/helpers
- Tests should be deterministic
NEVER:
- Use
--no-verifyto bypass commit hooks - Disable tests instead of fixing them
- Commit code that doesn't compile
- Make assumptions - verify with existing code
ALWAYS:
- Commit working code incrementally
- Update plan documentation as you go
- Learn from existing implementations
- Stop after 3 failed attempts and reassess