The Problem
Every web tool now demands an account, an email, or a tracking cookie before letting you do a simple task like resizing an image or converting a file. FckSignups is a curated directory of open-source, in-browser tools that work instantly with zero registration, aimed at developers and privacy-conscious users who are tired of signup walls.
What This Does
FckSignups is a React + TypeScript frontend that renders a searchable, filterable catalog of no-signup tools. The tool data lives in tools.json at the root, and the UI is built from components in src/components/. The project also ships a cloudflare-worker/ directory containing a TypeScript worker, presumably to fetch live GitHub star counts for listed tools.
The management_tools/addTool.py script automates adding new tools to the catalog, and the repo includes a GitHub issue template for community submissions.
How It Is Wired
Execution starts at index.html → src/main.tsx → src/App.tsx. App.tsx is the hub: it imports useTools (a hook that loads tools.json), Controls (search/filter UI), ToolGrid (renders ToolCard components), and Header/Footer. The module graph shows src/types/index.ts is the most imported module (5 importers), defining the tool schema used everywhere.
useTools.ts handles fetching and filtering the tool list. ToolCard.tsx renders individual tool entries with category icons from src/constants/icons.tsx. The cloudflare-worker/worker.ts is a separate entry point — a Cloudflare Worker that likely fetches GitHub star counts for the github field in each tool. The wiring for that worker (its routes, triggers, and how it feeds back into the main app) is not mapped in the static analysis.
The main app touches no backend — it reads tools.json statically. The only external effects are the Cloudflare Worker's outbound GitHub API calls (if deployed) and the addTool.py script writing to tools.json locally.
How To Use It
Setup (from README):
git clone https://github.com/moses-y/FckSignups.git && \
cd FckSignups && \
npm install && \
npm run dev
Configuration: No environment variables required for the frontend. The cloudflare-worker/wrangler.toml handles worker deployment config. The tool catalog is edited directly in tools.json or via python management_tools/addTool.py.
Running it: npm run dev starts the Vite dev server. The Cloudflare Worker deploys via wrangler deploy from the cloudflare-worker/ directory — no setup steps are documented in the README.
Real-World Use
A developer building a privacy-focused resource page can fork this repo, replace tools.json with their own curated list, and deploy the static frontend to any host. The Cloudflare Worker can be deployed separately to keep star counts fresh, but the site works without it — tools.json has static stars fields as fallback.
Code Health & Issues
Static analysis found 1 medium issue: duplicated ~6-line blocks across src/App.tsx and src/hooks/useTools.ts — extract shared helpers to DRY the logic.
SDLC observations from the file structure:
- High - No test suite — 17 source files, zero test files. Any change ships with no regression signal.
- High - No CI/CD pipeline — no workflow config in
.github/. Builds are never verified automatically. - Medium - No Dependabot/Renovate config — 2 manifest files (
package.json,cloudflare-worker/package.json) with no automated dependency updates. - Low - Missing convention files:
.editorconfig,.gitattributes, formatter config.
The repository has a license (MIT), a lockfile, and no committed secrets.
The Bottom Line
A clean, well-structured React catalog with a sensible data schema and a useful community contribution path. The core value is the curated tool list, not the code — the frontend is straightforward and the worker is optional. Worth using as a template for similar directories, but add tests and CI before treating it as a production asset.