# Contributing to Taskist We welcome and appreciate all contributions to **Taskist** — bug fixes, features, documentation, translations, and help for other users in the community. ## 💡 Before You Start **For anything beyond a small fix, please discuss the change first** in an [issue](https://github.com/Taskist/taskist/issues), in [GitHub Discussions](https://github.com/Taskist/taskist/discussions/categories/ideas), or by [email](mailto:taskist@outlook.in). It saves your time if the idea doesn't fit the project's direction. Other ways to help: - Answer questions in [GitHub Discussions](https://github.com/Taskist/taskist/discussions/categories/q-a) - Improve the [documentation](https://docs.taskist.org) - Spread the word — write about Taskist or link to it Found a vulnerability? Please **do not** open a public issue or pull request. Follow [SECURITY.md](SECURITY.md) to report it privately. ## 🛠 Setting Up Your Development Environment ### Prerequisites - [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0) - SQL Server (Express, LocalDB or the Docker image) - EF Core tools: `dotnet tool install --global dotnet-ef` - Optional: [Docker Desktop](https://www.docker.com/products/docker-desktop/) for the full stack ### Getting started ```bash git clone https://github.com/Taskist/taskist.git cd taskist dotnet restore src/Taskist.sln ``` Create `src/Presentation/Taskist.Web/appsettings.Development.json` (git-ignored): ```json { "ConnectionStrings": { "AppContext": "Server=.\\SQLEXPRESS;Database=Taskist;Integrated Security=True;TrustServerCertificate=True;" } } ``` Create the schema, then run `sql-scripts/02_defaults.sql` and `03_locale.sql` (`04_demo.sql` adds optional sample data): ```bash dotnet ef database update --project src/Libraries/Taskist.Data --startup-project src/Libraries/Taskist.Data ``` Run the app and sign in with `admin@taskist.org` / `Admin@123`: ```bash dotnet run --project src/Presentation/Taskist.Web ``` ### Solution layout | Project | Contents | | ------- | -------- | | `src/Libraries/Taskist.Core` | Entities, enums, DTOs, settings, shared helpers | | `src/Libraries/Taskist.Data` | EF Core context, configurations, migrations, repositories | | `src/Libraries/Taskist.Service` | Business services (registered automatically by assembly scan) | | `src/Presentation/Taskist.Web` | MVC controllers, views, view models, validators, `wwwroot` | | `src/Tests/Taskist.Tests` | xUnit tests (no database needed) | | `sql-scripts/` | Idempotent seed scripts, run in numeric order | | `tools/theme/` | Dark-theme generator (`generate-dark-css.py`) | ## ✅ Before Opening a Pull Request CI runs these on every pull request, so please run them locally first: ```bash dotnet build src/Taskist.sln dotnet test src/Taskist.sln # fails if the model changed without a migration dotnet ef migrations has-pending-model-changes --project src/Libraries/Taskist.Data --startup-project src/Libraries/Taskist.Data ``` If you changed an entity, add a migration: ```bash dotnet ef migrations add YourMigrationName --project src/Libraries/Taskist.Data --startup-project src/Libraries/Taskist.Data ``` Rebuild first; a stale build can produce an empty migration. ## 📐 Code Guidelines Please match the style of the file you are editing. In particular: **C#** - **No comments in `.cs` files.** Group members with `#region` blocks instead (`Fields`, `Ctor`, `Methods`, `Utilities`, …). - **One top-level type per file**, named after the type. Nested types stay with their parent. - Inject dependencies through the constructor into `private readonly` fields. **Views and front end** - **No inline `