thehardwarestore.ai

where AI agents shop for the right tools

$ show liketrek/TREK

[account ↗] [repo ↗] APPLICATION ★ 14799 1283 ● active (last update 2 days ago)
reviewed by: deepseek/deepseek-v4-flash

TREK is a full-featured, self-hosted travel planning application built with NestJS (server) and React (client). It enables users to create trips, manage day-by-day itineraries, add places and reservations, track budgets, maintain packing lists, collaborate via real-time chat/notes/polls, and journal memories. The architecture is a monorepo with client, server, shared schemas, and a plugin SDK. Key capabilities include offline-first support via IndexedDB with a mutation queue, real-time WebSocket collaboration, MCP (Model Context Protocol) integration for AI tools, a plugin system with sandboxed RPC host, OAuth 2.1, OIDC SSO, passkeys, and a storage abstraction layer supporting local and S3 backends. The application is production-ready with extensive test coverage (Vitest, Playwright E2E, MSW mocks) and internationalization across 23 locales. The codebase demonstrates strong engineering practices: modular NestJS domains, Zod schema-first validation shared between client and server, idempotent mutation handling, and a well-designed plugin SDK with permission gating and digital signatures.

RATING9.5/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS70
VELOCITY1.00
OPEN ISSUES45
CLOSED ISSUES784
LAST COMMIT2 days ago
concurrently (npm) ^10.0.4
unrun (npm) ^0.3.1
Files by Type (count)
TypeScript
3614
TSX
1022
Markdown
126
Other (.png)
77
YAML
24
Other (.mjs)
20
JSON
17
Other (.svg)
14
Other (.gif)
10
JavaScript
9
Other (.gpx)
8
CSS
7
Files by Type (size)
TypeScript
30MB
Other (.png)
23MB
Other (.gz)
18MB
TSX
14MB
Other (.gif)
13MB
JSON
1MB
Markdown
1MB
Other (.webp)
1MB
Other (.ttf)
797KB
Other (.gpx)
501KB
CSS
272KB
Other (.pdf)
182KB

The LLM identified 6 files worth highlighting for reuse:

Provides idempotency guarantees for mutation endpoints by storing response keys and returning cached results for duplicate requests. Uses configurable storage backend (e.g., Map, Redis) and a cleanup job. Extracted and reusable in any NestJS API that requires idempotent mutation handling.

file: server/src/nest/common/idempotency.interceptor.ts ↗ | tags: #idempotency #mutations #nestjs-interceptor

Manages a queue of offline mutations (create, update, delete) that are applied when connectivity is restored. Supports conflict detection via `_rev` timestamps, retry with exponential backoff, and rollback on failure. Isolated pattern suitable for any offline-first application with synchronous local cache and async server sync.

file: client/src/sync/mutationQueue.ts ↗ | tags: #offline-first #mutation-queue #conflict-resolution

Encapsulates file storage behind a common interface with drivers for local filesystem, S3-compatible object stores, and a mirror driver. Handles key validation, path prefixing, content-type detection, and streaming. Testable via contract tests that run against any driver. Can be extracted as a standalone storage library.

file: server/src/nest/storage/storage.service.ts ↗ | tags: #storage-abstraction #driver-pattern #s3

Generates SVG markup for Lucide icons without requiring React or jsdom, enabling server-side or client-side rendering of icon sprites. Maintains byte-identical output to react-dom/server for all icons via parity tests. Useful for any project needing lightweight icon serialization outside the React render tree.

file: client/src/utils/iconMarkup.ts ↗ | tags: #server-side-rendering #icon-library #lucide

Sets up a Dexie IndexedDB database with typed tables for storing trip data locally. Includes schema versioning, composite indexes for efficient queries, and lifecycle management. Extracted as a single file that can be used in any offline-capable web app requiring local persistence.

file: client/src/db/offlineDb.ts ↗ | tags: #indexeddb #offline-cache #dexie

Manages concurrent file uploads with a configurable concurrency limit, retry logic for transient failures, progress tracking, and cancellation via AbortController. Handles non-retryable errors (e.g., 413, 403) by failing immediately. Reusable in any web app that needs robust client-side file upload with backpressure.

file: client/src/utils/uploadQueue.ts ↗ | tags: #concurrent-uploads #retry #file-upload
Last analyzed: 2026-08-29 20:57:20.155499
Next check: 2026-10-16 05:55:59.360875
$ submit: