A modern Angular 20 application showcasing craft beers from the Punk API. Built with signal-based state management, zoneless change detection, and a dual data source architecture (API + sessionStorage).
Node.js: ^20.19.0 || ^22.12.0 || ^24.0.0
Check your version:
Example :node --version# Clone the repository
git clone https://github.com/lukazc/angular-signals-demo.git
cd angular-signals-demo
# Install dependencies
npm install
# Start development server
npm startOpen http://localhost:4200/ in your browser.
# Run all tests
npm test
# Run tests with coverage report
ng test --code-coverage
# Run tests once (CI mode)
ng test --watch=false --browsers=ChromeHeadlessTest Coverage: 375+ specs across all features (API, stores, components, interceptors)
# Development build
npm run build
# Production build
npm run build:prodBuild artifacts are output to the dist/ directory.
TypeDoc documentation is auto-generated and deployed with the app:
Example :# Generate docs
npm run docs
# Serve docs locally
npm run docs:serveAccess documentation at /docs in the running application or view online.
src/app/
โโโ components/ # UI components
โ โโโ beer-card/ # Beer display card
โ โโโ beer-list/ # Grid list with pagination
โ โโโ beer-detail-modal/ # Material dialog with full details
โ โโโ filters/ # Filter components (search, ABV, sort, favorites)
โโโ pages/ # Page-level components
โ โโโ beer-list-page/ # Main catalog page
โโโ services/ # Business logic
โ โโโ beer-api.service.ts # Punk API integration with retry logic
โ โโโ favorites.service.ts # sessionStorage management
โ โโโ loading.service.ts # Global loading state
โโโ stores/ # State management
โ โโโ beer.store.ts # Dual-source signal store
โโโ interceptors/ # HTTP interceptors
โ โโโ loading.interceptor.ts
โ โโโ error.interceptor.ts
โโโ models/ # TypeScript interfaces
โโโ beer.model.ts # Beer, filters, sort typesAll filter components are controlled (receive values via input(), emit changes via output()):
BeerStore (single source of truth)The app is automatically deployed to GitHub Pages via GitHub Actions:
main/angular-signals-demo/Beer data provided by Punk API via proxy at https://api.adscanner.tv/punkapi/v2/
Questions or issues? Open an issue on GitHub.
Built with Angular 20 โข Signals โข Zoneless โข Material Design