Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Project overview

d2-checklist is the Angular front end for [d2checklist.com](https://www.d2checklist.com), a Destiny 2 companion app. It uses Angular 14, Angular Material, and the Bungie API.
d2-checklist is the Angular front end for [d2checklist.com](https://www.d2checklist.com), a Destiny 2 companion app. It uses Angular 18, Angular Material, and the Bungie API.

## Build and run

Expand All @@ -22,20 +22,19 @@ ALWAYS bump the version in package.json for each new PR. If the bungie manifest

- `src/app/` - Angular application source
- `service/` - Core services (bungie.service, parse.service, gear.service, etc.)
- `shared/` - Shared module with reusable components, pipes, and utilities
- `player/`, `clan/`, `gear/`, `friends/`, `history/`, `vendors/`, `pgcr/` - Feature modules
- `app-routing.module.ts` - All routes
- `app.module.ts` - Root module declarations and providers
- `shared/` - Reusable standalone components, pipes, and utilities
- `player/`, `clan/`, `gear/`, `friends/`, `history/`, `vendors/`, `pgcr/` - Feature directories
- `app.routes.ts` - All routes and route guards
- `main.ts` - Bootstrap entry point (`bootstrapApplication`)
- `src/environments/` - Environment configs; `keys.ts` (gitignored) holds Bungie API credentials
- `src/assets/` - Static assets (JSON files tracked via git LFS)
- `.github/workflows/` - CI/CD (deploy.yml, beta-deploy.yml)

## Key patterns

- Module-based Angular architecture (not standalone components)
- Many components extend `ChildComponent` (abstract base) for shared state/lifecycle
- Services are provided in `app.module.ts`, not `providedIn: 'root'`
- `SharedModule` re-exports Angular Material modules and common components
- Standalone component architecture (no NgModules) — each component imports its own dependencies
- Many components extend `ChildComponent` for shared state (delegates to `AppStateService`)
- Services use `providedIn: 'root'`; route guards provided in `main.ts` bootstrap
- `parse.service.ts` is the largest file (~4k lines) - handles Bungie API response parsing

## Git LFS
Expand Down
8 changes: 7 additions & 1 deletion docs/modernization-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,13 @@ Angular migrations must go one major version at a time:
- [x] Angular 17 → 18 (`ng update @angular/core@18 @angular/cli@18`)

### 7c: Post-migration modernization
- [ ] Migrate key components to standalone (remove NgModule boilerplate)
- [x] Migrate key components to standalone (remove NgModule boilerplate)
- Ran Angular standalone migration schematic (3 steps: convert, prune, bootstrap)
- All 129 components now `standalone: true` with per-component imports
- Deleted all 15 NgModule files (SharedModule, MilestoneCheckModule, 12 feature modules, AppRoutingModule)
- `main.ts` uses `bootstrapApplication()` with `provideRouter()`, `provideServiceWorker()`, `provideHttpClient()`, `provideAnimations()`
- Moved `MAT_TOOLTIP_DEFAULT_OPTIONS` from MilestoneCheckModule to MilestoneCheckComponent providers
- Deleted `Destroyable` base class (replaced with direct subscription in LoggedInGuard)
- [x] Replace `ChildComponent` base class with `DestroyRef` + `takeUntilDestroyed`
- Created `AppStateService` for shared state (debugmode, disableAds, favorites, hiddenMilestones)
- `ChildComponent` now uses `inject()` — no constructor params, delegates to `AppStateService`
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "d2-checklist",
"version": "29.1.0",
"version": "29.2.0",
"manifest": "242999.26.03.25.2000-1-bnet.64463",
"license": "MIT",
"scripts": {
Expand Down
14 changes: 0 additions & 14 deletions src/app/about/about.module.ts

This file was deleted.

13 changes: 9 additions & 4 deletions src/app/about/about/about.component.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { IconService } from '@app/service/icon.service';
import { ChildComponent } from '../../shared/child.component';
import { MatAnchor } from '@angular/material/button';
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
import { RouterLink } from '@angular/router';

@Component({
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'd2c-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.scss']
changeDetection: ChangeDetectionStrategy.OnPush,
selector: 'd2c-about',
templateUrl: './about.component.html',
styleUrls: ['./about.component.scss'],
standalone: true,
imports: [MatAnchor, FaIconComponent, RouterLink]
})
export class AboutComponent extends ChildComponent {
constructor(public iconService: IconService) {
Expand Down
1 change: 0 additions & 1 deletion src/app/about/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export * from './about.module';
export * from './about/about.component';
Loading
Loading