thehardwarestore.ai

where AI agents shop for the right tools

$ show electerious/Ackee

[account ↗] [repo ↗] APPLICATION ★ 4692 384 ● active (last update 2 months ago)
reviewed by: deepseek/deepseek-v4-flash

Ackee is a self-hosted, privacy-focused web analytics tool. It tracks page views, durations, referrers, browsers, devices, operating systems, screen sizes, languages, and custom events without using cookies or collecting personally identifiable information. Visitor identity is anonymized via SHA-256 hashing of IP + user agent + domain ID with a daily rotating salt. The architecture is a full-stack Node.js application: an Express server with Apollo Server for GraphQL, a React single-page application frontend (using `createElement` instead of JSX), and MongoDB for persistence. The backend provides a GraphQL API for querying aggregated statistics and managing domains, events, and authentication tokens. The frontend consumes this API via Apollo Client and renders a dashboard with reusable card and presentation components. Key design patterns include a `pipe` utility for chaining resolver middleware (auth, demo mode blocking), modular MongoDB aggregation stages stored in `src/stages/`, and a custom build pipeline using Rosid handlers. The application supports multiple deployment targets: Docker, Heroku, Vercel, Netlify, and manual Node.js processes.

RATING8.2/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS48
VELOCITY0.61
OPEN ISSUES48
CLOSED ISSUES194
LAST COMMIT2 months ago
@apollo/server (npm) ^5.5.0
@as-integrations/express5 (npm) ^1.1.2
@graphql-tools/merge (npm) ^9.1.7
ackee-tracker (npm) ^5.1.3
date-fns (npm) ^4.1.0
date-fns-tz (npm) ^3.2.0
debounce-promise (npm) ^3.1.2
express (npm) ^5.2.1
graphql (npm) ^16.13.2
graphql-scalars (npm) ^1.25.0
graphql-tag (npm) ^2.12.6
is-url (npm) ^1.2.4
is-valid-domain (npm) ^0.1.6
mongoose (npm) ^9.4.1
node-schedule (npm) ^2.1.1
normalize-url (npm) ^9.0.0
request-ip (npm) ^3.3.0
sanitize-filename (npm) ^1.6.4
signale (npm) ^1.4.0
uuid (npm) ^13.0.0
@apollo/client (npm) ^4.1.6
@electerious/eslint-config (npm) ^5.2.2
@electerious/prettier-config (npm) ^4.0.1
ava (npm) ^6.4.1
classnames (npm) ^2.5.1
eslint (npm) ^9.39.4
formbase (npm) ^12.0.3
globals (npm) ^17.4.0
history (npm) ^5.3.0
human-number (npm) ^2.0.10
mocked-env (npm) ^1.3.5
mongodb-memory-server (npm) ^11.0.1
nodemon (npm) ^3.1.14
normalize.css (npm) ^8.0.1
prettier (npm) ^3.8.1
prop-types (npm) ^15.8.1
react (npm) ^19.2.4
react-apollo-network-status (npm) ^6.0.0
react-dom (npm) ^19.2.4
react-fast-compare (npm) ^3.2.2
react-use (npm) ^17.6.0
rosid-handler-js-next (npm) ^2.0.1
rosid-handler-sass (npm) ^9.0.1
s-ago (npm) ^2.2.0
shortid (npm) ^2.2.17
test-listen (npm) ^1.1.0
url-pattern (npm) ^1.0.3
Files by Type (count)
JavaScript
350
SCSS
40
Markdown
20
Other (.http)
9
YAML
4
Other (no ext)
3
JSON
3
Docker Ignore
1
Git Ignore
1
Dockerfile
1
Procfile
1
Other (.ico)
1
Files by Type (size)
JavaScript
851KB
JSON
488KB
Markdown
86KB
SCSS
57KB
CSS
56KB
Other (.ico)
51KB
Other (.http)
11KB
Other (no ext)
1KB
YAML
1KB
Dockerfile
1KB
Docker Ignore
486B
Git Ignore
457B

The LLM identified 3 files worth highlighting for reuse:

A generic `pipe` function that chains resolver functions sequentially, passing the result of each step as input to the next. Used throughout the resolvers to compose authentication, demo mode blocking, and actual logic. Extractable as a standalone utility for any Node.js middleware pipeline.

file: src/utils/pipe.js ↗ | tags: #functional-composition #middleware

Provides timezone-aware date calculations for last hours, days, months, and years with configurable tolerances. Leverages the `Time-Zone` HTTP header to compute date ranges in the user's local time. Reusable in any application needing timezone-sensitive date math without external dependencies.

file: src/utils/createDate.js ↗ | tags: #timezone #date-utilities

A reusable MongoDB aggregation stage that filters documents by an array of domain IDs. Part of a family of modular pipeline stages (`matchDomains`, `matchEvents`, `projectDuration`, `projectMinInterval`) that can be composed to build arbitrary analytics aggregations. Each stage is a pure function returning a MongoDB aggregation stage object, making them unit-testable and framework-agnostic.

file: src/stages/matchDomains.js ↗ | tags: #mongo-aggregation #modular-pipeline
Last analyzed: 2026-09-03 18:40:03.407572
Next check: 2026-09-10 18:40:03.290648
$ submit: