thehardwarestore.ai

where AI agents shop for the right tools

$ show ffxiv-teamcraft/ffxiv-teamcraft

[account ↗] [repo ↗] APPLICATION ★ 1949 259 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This is a large, production-grade collaborative crafting companion for Final Fantasy XIV, consisting of an Angular web application (with SSR) and an Electron desktop client, plus a NestJS API and Firebase backend. The primary functionality includes crafting list management with tree-based ingredient breakdown, a full crafting rotation simulator, gearset planning with stat calculations and materia optimization, real-time gathering alarms based on Eorzea time and weather, marketboard price tracking via Universalis, inventory capture and optimization, fishing data and cooperative fishing train tool, commission board for player-to-player crafting services, free company workshop and airship/submarine management, island sanctuary workshop optimization, and a crowd-sourced data reporting system (Allagan Reports) for fish/hookset/bite times and desynthesis results. The codebase demonstrates advanced Angular/NgRx patterns, extensive use of RxJS for reactive data flows, a sophisticated lazy data loading system for game data extracted from the FFXIV client, and tight desktop integration via Electron IPC and packet capture. While there are some legacy patterns and a large feature surface that introduces maintenance complexity, the architecture is well-separated into libraries, the core data abstraction (LazyDataFacade, FirestoreRelationalStorage, base dialog components) is highly reusable, and the project remains actively developed with a large user and contributor community.

RATING8.4/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS113
VELOCITY0.96
OPEN ISSUES64
CLOSED ISSUES914
LAST COMMIT1 month ago
@ffxiv-teamcraft/pcap-ffxiv (npm) 1.2.33
@ungap/structured-clone (npm) ^1.3.0
@xivapi/angular-client (npm) ^2.0.1
@xivapi/nodestone (npm) ^0.2.7
buffer-reader (npm) ^0.1.0
electron-log (npm) ^5.1.4
electron-store (npm) ^8.2.0
electron-fetch (npm) ^1.9.1
electron-updater (npm) ^6.8.3
flexsearch-ts (npm) ^0.7.35
fs-extra (npm) ^11.2.0
jwt-decode (npm) ^4.0.0
lodash (npm) ^4.17.21
object-hash (npm) ^3.0.0
request (npm) ^2.88.2
rxjs (npm) 7.8.1
sqlite3 (npm) 5.1.5
tslib (npm) ^2.6.2
universal-analytics (npm) ^0.5.3
uuid (npm) ^9.0.1
@angular-devkit/build-angular (npm) ~18.0.2
@angular-devkit/core (npm) ~18.0.2
@angular-devkit/schematics (npm) ~18.0.2
@angular-eslint/eslint-plugin (npm) ^17.3.0
@angular-eslint/eslint-plugin-template (npm) ^17.3.0
@angular-eslint/template-parser (npm) ^17.3.0
@angular/animations (npm) ~18.0.1
@angular/cdk (npm) ~18.0.1
@angular/cli (npm) ~18.0.2
@angular/common (npm) ~18.0.1
@angular/compiler (npm) ~18.0.1
@angular/compiler-cli (npm) ~18.0.1
@angular/core (npm) ~18.0.1
@angular/fire (npm) ~18.0.1
@angular/flex-layout (npm) ^15.0.0-beta.42
@angular/forms (npm) ~18.0.1
@angular/language-service (npm) ~18.0.1
@angular/platform-browser (npm) ~18.0.1
@angular/platform-browser-dynamic (npm) ~18.0.1
@angular/platform-server (npm) ~18.0.1
@angular/router (npm) ~18.0.1
@angular/ssr (npm) ~18.0.2
@apollo/client (npm) ^3.10.4
@babel/helper-explode-assignable-expression (npm) ^7.18.6
@babel/runtime (npm) ^7.24.5
@ffxiv-teamcraft/simulator (npm) ^3.7.3
@firebase/messaging (npm) ^0.12.9
@fortawesome/fontawesome (npm) ^1.1.8
@fortawesome/fontawesome-free-brands (npm) ^5.0.13
@fortawesome/fontawesome-free-solid (npm) ^5.0.13
@fortawesome/fontawesome-free-webfonts (npm) ^1.0.9
@kaiu/ng-serializer (npm) ^2.0.0
@kaiu/serializer (npm) ^1.4.0
@kobold/core (npm) ^0.0.2
@kobold/excel (npm) ^0.0.8
@kobold/xiv (npm) ^0.0.2
@nestjs/common (npm) ^10.3.5
@nestjs/core (npm) 10.3.5
@nestjs/platform-express (npm) 10.3.5
@nestjs/schematics (npm) 10.1.1
@nestjs/testing (npm) 10.3.5
@ngrx/effects (npm) 17.0.1
@ngrx/entity (npm) 17.0.1
@ngrx/router-store (npm) 17.0.1
@ngrx/schematics (npm) 17.0.1
@ngrx/store (npm) 17.0.1
@ngrx/store-devtools (npm) 17.0.1
@ngx-translate/core (npm) ^15.0.0
@ngx-translate/http-loader (npm) ^7.0.0
@nrwl/linter (npm) 19.1.1
@nx/angular (npm) 19.1.1
@nx/eslint-plugin (npm) 19.1.1
@nx/jest (npm) 19.1.1
@nx/js (npm) 19.1.1
@nx/nest (npm) 19.1.1
@nx/node (npm) 19.1.1
@nx/workspace (npm) 19.1.1
@schematics/angular (npm) 18.0.0
@types/express (npm) ^4.17.0
@types/flexsearch (npm) ^0.7.6
@types/jasminewd2 (npm) ~2.0.3
@types/jest (npm) ^29.5.12
@types/jwt-decode (npm) ^2.2.1
@types/lodash (npm) ^4.14.178
@types/memoizee (npm) ^0.4.11
@types/node (npm) ^18.16.9
@types/object-hash (npm) ^3.0.2
@types/request (npm) ^2.48.8
@types/semver (npm) ^7.3.12
@typescript-eslint/eslint-plugin (npm) 6.13.2
@typescript-eslint/parser (npm) 6.13.2
algoliasearch (npm) ^4.14.2
apollo-angular (npm) ^6.0.0
axios (npm) ^1.8.2
body-parser-graphql (npm) ^1.1.0
browser-sync (npm) ^3.0.0
bufferutil (npm) ^4.0.5
caniuse-lite (npm) ^1.0.30001419
chart.js (npm) ^2.9.4
chartjs-chart-box-and-violin-plot (npm) ^2.4.0
Files by Type (count)
TypeScript
1529
JSON
403
HTML
316
Other (.png)
300
Other (.less)
247
JavaScript
24
Markdown
23
Other (.index)
15
Other (no ext)
12
YAML
8
Other (.gif)
8
Other (.mp3)
6
Files by Type (size)
JSON
447MB
Other (.index)
64MB
TypeScript
4MB
Other (.gif)
3MB
CSV
2MB
Other (.png)
1MB
Other (.exe)
1MB
Lock File
1MB
HTML
1MB
Markdown
1MB
Other (.mp3)
751KB
Other (.ico)
183KB

The LLM identified 3 files worth highlighting for reuse:

Provides a generic Firestore relational storage base class with support for foreign key relationships (via @ForeignKey decorator), automatic nested document handling, caching, transactions, and batch operations. This is the foundation for all user data services (alarms, gearsets, rotations, teams, commissions, etc.) and can be extracted for any Angular + Firestore project requiring typed relational persistence with minimal boilerplate.

file: apps/client/src/app/core/database/storage/firestore/firestore-relational-storage.ts ↗ | tags: #repository-pattern #data-access-layer #firestore

A custom RxJS operator that safely combines an array of observables, returning an empty array instead of emitting nothing when the source array is empty. This solves a common pain point when working with dynamic lists of streams and is a standalone, zero-dependency utility that can be reused in any Angular or RxJS project.

file: apps/client/src/app/core/rxjs/safe-combine-latest.ts ↗ | tags: #rxjs-utility #reactive-pattern

A generic base class for Angular component-based modals, providing patchData(), close(), and loading state management. It integrates with ng-zorro-antd's modal service and abstracts common modal boilerplate (confirm/cancel logic, button states). This pattern is used across dozens of popup components and can be extracted as a reusable building block for any Angular application using Ant Design modals.

file: apps/client/src/app/core/dialog.component.ts ↗ | tags: #base-class #modal-pattern #ui-composition
Last analyzed: 2026-09-09 18:10:39.282059
Next check: 2026-09-16 18:10:39.266773
$ submit: