{"id":43537262,"url":"https://github.com/theunschut/dnd-quest-board","last_synced_at":"2026-03-04T14:03:02.381Z","repository":{"id":301401560,"uuid":"1004431797","full_name":"theunschut/dnd-quest-board","owner":"theunschut","description":"Quest Board is a web application for D\u0026D campaign management featuring quest creation, player   coordination, calendar scheduling, and email notifications.","archived":false,"fork":false,"pushed_at":"2026-02-13T09:29:25.000Z","size":27223,"stargazers_count":2,"open_issues_count":8,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T20:33:57.098Z","etag":null,"topics":["aspnet-core","bootstrap","calendar","campaign-management","csharp","dnd","docker","dungeons-and-dragons","mvc","quest-management","scheduling","sql-server-2022","web-application"],"latest_commit_sha":null,"homepage":"","language":"C#","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/theunschut.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":"2025-06-18T16:00:02.000Z","updated_at":"2026-02-13T09:29:28.000Z","dependencies_parsed_at":"2026-01-27T17:03:14.819Z","dependency_job_id":null,"html_url":"https://github.com/theunschut/dnd-quest-board","commit_stats":null,"previous_names":["cryptic96/quest-board","theunschut/quest-board","theunschut/dnd-quest-board"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/theunschut/dnd-quest-board","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theunschut%2Fdnd-quest-board","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theunschut%2Fdnd-quest-board/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theunschut%2Fdnd-quest-board/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theunschut%2Fdnd-quest-board/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theunschut","download_url":"https://codeload.github.com/theunschut/dnd-quest-board/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theunschut%2Fdnd-quest-board/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30083010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T13:22:36.021Z","status":"ssl_error","status_checked_at":"2026-03-04T13:20:45.750Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["aspnet-core","bootstrap","calendar","campaign-management","csharp","dnd","docker","dungeons-and-dragons","mvc","quest-management","scheduling","sql-server-2022","web-application"],"created_at":"2026-02-03T17:08:58.994Z","updated_at":"2026-03-04T14:03:02.372Z","avatar_url":"https://github.com/theunschut.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![.NET CI](https://github.com/theunschut/quest-board/actions/workflows/dotnet.yml/badge.svg?branch=main)](https://github.com/theunschut/quest-board/actions/workflows/dotnet.yml) [![Docker](https://github.com/theunschut/quest-board/actions/workflows/docker-publish.yml/badge.svg?branch=main)](https://github.com/theunschut/quest-board/actions/workflows/docker-publish.yml)\n\n# D\u0026D Quest Board\n\nA comprehensive web application for managing D\u0026D campaign quests with multiple DMs and players. Built with ASP.NET Core 8 MVC architecture following clean architecture principles with domain, repository, and service layers.\n\n## Features\n\n### Core Quest Management\n- **DM Registration**: Dungeon Masters can register in the guild directory\n- **Quest Creation**: DMs can create quests with multiple proposed dates and difficulty levels\n- **Player Signup**: Players can sign up and vote on available dates (Yes/No/Maybe)\n- **Quest Management**: DMs can review votes and finalize quest details\n- **Email Notifications**: Automatic email notifications when quests are finalized\n\n### User Management \u0026 Authentication\n- **User Accounts**: Full user registration and authentication system\n- **Session Management**: Secure session-based authentication for DMs\n- **Authorization**: Role-based access control with Dungeon Master requirements\n\n### Calendar \u0026 Scheduling\n- **Calendar View**: Monthly calendar displaying all scheduled quests\n- **Date Management**: Comprehensive date voting and scheduling system\n- **Quest Timeline**: Visual representation of upcoming adventures\n\n### User Experience\n- **DM Directory**: Browse and contact registered Dungeon Masters\n- **Responsive Design**: Bootstrap 5-based UI with D\u0026D themed styling\n- **Real-time Updates**: Auto-refresh on quest detail pages every 30 seconds\n- **Quest Difficulty System**: Color-coded difficulty badges (Easy, Medium, Hard, Deadly)\n\n## Quick Start\n\n### Using Docker (Recommended)\n\n1. Clone the repository\n2. Configure your Gmail SMTP settings in environment variables or `.env` file\n3. Run with Docker Compose from the root directory:\n\n```bash\ndocker-compose up -d\n```\n\nThe application will be available at `http://localhost:8080`\n\n### Local Development\n\n1. Install .NET 8 SDK\n2. Configure email settings in `QuestBoard.Service/appsettings.json`\n3. Run the application from root directory:\n\n```bash\ndotnet run --project QuestBoard.Service\n```\n\n### Using Solution File\n\nFrom the root directory, you can also build and run using the solution:\n\n```bash\ndotnet build\ndotnet run --project QuestBoard.Service\n```\n\n## Project Structure\n\nThe application follows a clean architecture pattern with three main projects:\n\n- **QuestBoard.Domain**: Core business models, enums, services, and domain logic\n- **QuestBoard.Repository**: Data access layer with Entity Framework Core, repositories, and entity configurations\n- **QuestBoard.Service**: MVC web application with controllers, views, services, authorization, and view models\n\n### Key Components\n\n#### Domain Layer\n- **Models**: Quest, User, PlayerSignup, ProposedDate, PlayerDateVote\n- **Services**: QuestService, UserService, PlayerSignupService, EmailService\n- **Configuration**: SecurityConfiguration for application security settings\n- **Enums**: Difficulty levels (Easy, Medium, Hard, Deadly), VoteType (Yes, No, Maybe)\n\n#### Repository Layer\n- **Entities**: Database entity classes with EF Core configurations\n- **Repositories**: Data access implementations with dependency injection\n- **Context**: QuestBoardContext with SQLite database configuration\n\n#### Service Layer\n- **Controllers**: Home, Quest, DungeonMaster, Account, Calendar\n- **Authorization**: Custom Dungeon Master authorization handlers and requirements\n- **ViewModels**: Strongly-typed models for form binding and data transfer\n- **Views**: Razor templates with Bootstrap 5 and D\u0026D theming\n\n## Configuration\n\n### Email Settings\n\nConfigure Gmail SMTP in `QuestBoard.Service/appsettings.json` or environment variables:\n\n```json\n{\n  \"EmailSettings\": {\n    \"SmtpUsername\": \"your-email@gmail.com\",\n    \"SmtpPassword\": \"your-app-password\",\n    \"FromEmail\": \"your-email@gmail.com\"\n  }\n}\n```\n\nOr use environment variables:\n- `SMTP_USERNAME`: Your Gmail address\n- `SMTP_PASSWORD`: Gmail app-specific password\n- `FROM_EMAIL`: Email address to send from\n\n### Database\n\nThe application uses SQLite with Entity Framework Core. The database file (`quests.db`) will be created automatically in the root directory on first run.\n\n## Usage\n\n1. **DM Registration**: Visit the Dungeon Masters page to register as a new DM\n2. **Create Quest**: Select a registered DM and create quest details with multiple date options\n3. **Player Signup**: Players can view quests and sign up with date preferences (Yes/No/Maybe)\n4. **Manage Quest**: DMs can review signups and voting, then finalize the quest\n5. **My Quests**: DMs can manage all their created quests from a personal dashboard\n6. **Email Notifications**: Selected players receive automatic email notifications\n\n## Key Pages\n\n### Public Pages\n- `/` - Main quest board displaying all available quests\n- `/Account/Login` - User authentication\n- `/Account/Register` - New user registration\n- `/DungeonMaster` - Browse registered Dungeon Masters and register as new DM\n\n### Quest Management\n- `/Quest/Create` - DM quest creation with multiple date options\n- `/Quest/Details/{id}` - Quest details and player signup with date voting\n- `/Quest/Manage/{id}` - DM interface for finalizing quests and selecting players\n- `/Quest/MyQuests` - DM's personal quest management dashboard\n\n### Calendar \u0026 Organization\n- `/Calendar` - Monthly calendar view of all scheduled quests\n- `/Account/Profile` - User profile management\n\n## Docker Deployment\n\n### Development\n```bash\ndocker-compose up -d\n```\n\n### Production Notes\n\n- Database is stored in `./quests.db` in the root directory and persisted via Docker volume\n- Configure reverse proxy (nginx) for HTTPS and custom domain\n- Backup the `quests.db` file regularly\n- Set email configuration via environment variables in production\n\n## Tech Stack\n\n- **Backend**: ASP.NET Core 8 MVC with Repository Pattern\n- **Database**: SQLite with Entity Framework Core\n- **Frontend**: Bootstrap 5 + vanilla JavaScript with D\u0026D theming\n- **Email**: .NET SMTP client with Gmail integration\n- **Deployment**: Docker + Docker Compose\n- **Architecture**: Domain-Repository-Service pattern with AutoMapper","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheunschut%2Fdnd-quest-board","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheunschut%2Fdnd-quest-board","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheunschut%2Fdnd-quest-board/lists"}