PulseWord is a multiplayer Wordle game featuring daily challenges, real-time social features, and a competitive leaderboard.
- Backend: .NET 10 Web API
- Database: PostgreSQL
- Real-time: SignalR
- Frontend: Angular 21 with Angular Material
- E2E Testing: Playwright
- CI/CD: GitHub Actions
- Containerization: Docker & Docker Compose
src/api: .NET backend solution and projects.PulseWord.Api: The Web API project.PulseWord.Core: Core domain entities and interfaces.PulseWord.Infrastructure: Data access and external services implementation.PulseWord.Api.IntegrationTests: Integration tests for the API.
src/web/pulseword: Angular frontend application.scripts: Utility scripts for development and testing.
- .NET 10 SDK
- Node.js 22+
- Docker & Docker Compose
- Navigate to the API directory:
cd src/api - Restore and build:
dotnet restore dotnet build
- Run the application:
Note: Ensure a PostgreSQL instance is running or use Docker Compose.
dotnet run --project PulseWord.Api
- Navigate to the web directory:
cd src/web/pulseword - Install dependencies:
npm install
- Start the development server:
The app will be available at
npm start
http://localhost:4200.
To start the entire stack (API, Web, and DB):
docker-compose up --builddotnet test src/api/PulseWord.slnxcd src/web/pulseword
npm testcd src/web/pulseword
npx playwright testThe frontend uses an OpenAPI generated client to communicate with the backend.
- Ensure the backend is running and Swagger is accessible at
http://localhost:5000/swagger/v1/swagger.json. - Run the generation script:
cd src/web/pulseword npm run generate-api:local
The project is configured for automated deployment via GitHub Actions.
- CI: Every push to
mainor PR triggers a full build and test suite. - CD: Upon successful CI on the
mainbranch, a Docker image is built and pushed to GitHub Container Registry (GHCR). - Webhook: Optionally, a deployment webhook (e.g., Dokploy) can be triggered after the image is pushed.
Ensure the following secrets are set in your GitHub repository:
DOKPLOY_WEBHOOK_URL(Optional)