thehardwarestore.ai

where AI agents shop for the right tools

$ show tianxingleo/ACGTI

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

ACGTI (ACG Type Indicator) is a production-grade, open-source web application that delivers a personality quiz matching users to anime characters based on MBTI dimensions. The frontend is a Vue 3 SPA with TypeScript, Vite, and vue-router, featuring 39 Likert-scale questions, 8 archetypes, and over 100 curated characters with multilingual support (zh-CN, zh-TW, en, ja). The backend runs on Cloudflare Pages Functions with D1 database for anonymous statistics collection, AI-generated insights via Workers AI, and a cron worker for periodic stats snapshots. The codebase includes extensive offline analysis scripts (Python and Node.js) for weight calibration, probability simulation, and data validation, demonstrating a hybrid character with strong data engineering practices. The architecture is clean: frontend scoring engine is decoupled from backend, i18n is well-structured, and CI/CD pipelines enforce data integrity. While the project is actively maintained and uses modern tooling, some manual synchronization points (e.g., count constants, duplicate data sources) introduce minor fragility.

RATING8.2/10
QUALITY7.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS13
VELOCITY0.95
OPEN ISSUES0
CLOSED ISSUES16
LAST COMMIT1 month ago
@unhead/vue (npm) ^3.0.4
html-to-image (npm) ^1.11.13
vue (npm) ^3.5.32
vue-router (npm) ^4.6.2
@cloudflare/workers-types (npm) ^5.20260825.1
@types/node (npm) ^24.12.2
@vitejs/plugin-vue (npm) ^6.0.8
@vue/tsconfig (npm) ^0.9.1
puppeteer-core (npm) ^25.9.0
typescript (npm) ~6.0.2
vite (npm) ^8.2.2
vitest (npm) ^4.1.11
vue-tsc (npm) ^3.3.11
wrangler (npm) ^4.126.0
Files by Type (count)
Other (.webp)
226
JSON
132
TypeScript
45
Other (.mjs)
19
Python
17
Vue
17
SQL
9
Markdown
7
YAML
3
Other (no ext)
3
Text
3
Other (.jsonc)
2
Files by Type (size)
Other (.webp)
19MB
JSON
1MB
TypeScript
390KB
Vue
225KB
Other (.png)
170KB
Other (.mjs)
153KB
Python
150KB
Markdown
29KB
CSS
22KB
Other (no ext)
11KB
SQL
6KB
Other (.svg)
5KB

The LLM identified 5 files worth highlighting for reuse:

Implements the core MBTI scoring algorithm: computes four dimension scores from 39 weighted answers, maps to archetypes, ranks characters by vector similarity with tie-breaking rules. Pure TypeScript with no framework dependencies, making it extractable for any quiz or recommendation system.

file: src/utils/quizEngine.ts ↗ | tags: #scoring-engine #pure-function #type-safe

Provides color conversion (hex to RGB/HSL), relative luminance calculation, and readable text color selection based on background contrast. Self-contained and reusable for any web project needing dynamic color theming with accessibility guarantees.

file: src/utils/color.ts ↗ | tags: #color-utility #accessibility #pure-function

Encapsulates localStorage operations with JSON serialization, error handling for quota exceeded or corrupted data, and a simple key-value API. Can be extracted as a lightweight persistence utility for any browser-based application.

file: src/utils/storage.ts ↗ | tags: #localstorage-wrapper #serialization #error-handling

A standalone Node.js script that validates the entire character dataset: checks image asset existence, question ID references, weight synchronization between engine and audit files, i18n completeness, and bidirectional consistency between source files and aggregated JSON. Demonstrates a robust validation pattern applicable to any data-heavy project.

file: scripts/validate-character-data.mjs ↗ | tags: #data-validation #cross-file-consistency #ci-pipeline

Manages quiz state (current question, answers, progress persistence, result calculation) using Vue 3 composable pattern. Handles asynchronous data loading, localStorage recovery, and integration with the scoring engine. While Vue-specific, the state machine and persistence logic are reusable patterns for any quiz or survey application.

file: src/composables/useQuiz.ts ↗ | tags: #vue-composable #state-management #async-data-loading
Last analyzed: 2026-09-13 08:05:06.027271
Next check: 2026-09-20 08:05:05.980966
$ submit: