Uses tech platform foundation#2070
Open
wesbos wants to merge 54 commits into
Open
Conversation
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
|
Cursor Agent can help with this pull request. Just |
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
uses-tech | 0f29083 | Commit Preview URL Branch Preview URL |
Mar 07 2026, 03:36 AM |
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Owner
Author
|
@cursoragent can you add a button to scrape the pages? I don't care about auth just yet. |
|
Absolutely — here’s a good reply you can post on the PR:
|
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
Co-authored-by: Wes Bos <wes@wesbos.com>
The title attribute was on the Link wrapper but the img filled the clickable area, preventing the browser tooltip from showing. Moved title onto the img element and added a title to the +N overflow badge listing hidden names. Made-with: Cursor
- Remove people count and FacePile from TagCard header - Skip articles (the/a/an) in groupByBrand to prevent incorrect grouping - Add HIDDEN_TAGS constant and filter hidden tags from /tags page Made-with: Cursor
- Install drizzle-orm and drizzle-kit with better-sqlite3 for studio - Add Drizzle schema (schema.ts) for all tables including new items table - Rewrite d1.ts from raw D1 SQL to Drizzle query builder - Add new DB helpers: getErrorPeople, deletePersonItems, insertPersonItems, getScrapedContent, getAllUniqueItems, item enrichment CRUD - Add migration 0007 for the items enrichment table - Add drizzle.config.ts with auto-discovery of local D1 sqlite file - Add db:studio, db:generate, db:migrate, db:migrate:remote scripts - Update d1.test.ts for Drizzle compatibility - Clean up amazon.ts, analytics.ts, reclassify.ts env resolution Made-with: Cursor
- Add checkboxes and select-all to dashboard people table - Add Scrape Selected button that re-scrapes and re-extracts items - Import $reScrapeAndExtract server function for on-demand scraping Made-with: Cursor
- New /items-dashboard route with table of all unique items - Filter by enrichment status and item type - Select items and batch-enrich via OpenAI (type, description, URL) - Memoized rows and infinite scroll for performance with large datasets Made-with: Cursor
- New /wall-of-shame route listing people with error/404 status - Homepage fetches error slugs and filters them from the people grid Made-with: Cursor
- New Nav component with links to Home, Tags, Dashboard, Items, Wall of Shame - Active state highlighting based on current pathname - Integrated between Header and Outlet in root layout Made-with: Cursor
- Add $reScrapeAndExtract, $enrichItems, $getItemsDashboard, $getErrorPeople, $getErrorSlugs server functions - Show item type badge, description, and URL on item detail page - Only show Amazon product matches for items typed as "product" - Include auto-generated route tree updates for new routes Made-with: Cursor
Move data fetching from client-side useEffect into a TanStack Router loader so the item detail page is fully server-rendered without a loading spinner. Also return the object directly from $getItemDetail instead of JSON.stringify. Made-with: Cursor
- Create shared SEO helper (src/lib/seo.ts) with buildMeta() and ogImageUrl() - Add workers-og powered /og endpoint for dynamic Open Graph images - Add head() with title, description, OG, and Twitter Card tags to: root, index, people, items, tags, tag detail, and like routes - Add canonical URLs to all routes Made-with: Cursor
Replace the FacePile on item detail pages with a grid of PersonMiniCard components that show avatar, name, and bio for each person using the item. Made-with: Cursor
Unify avatar URL generation into a single getAvatarUrl() in lib/avatar.ts, used by both client components and server functions. Build a chained fallback: X -> GitHub -> Bluesky -> Mastodon -> website domain, using unavatar's ?fallback= parameter for graceful degradation. Made-with: Cursor
- Add vectorize binding to wrangler.jsonc for uses-similarity index - Create scripts/vectorize-profiles.ts to embed scraped /uses content via OpenAI text-embedding-3-small and upsert to Vectorize - Add $getSimilarPeople server function that queries Vectorize for nearest neighbors by cosine similarity - Display "Similar People" section on person pages using PersonMiniCard Made-with: Cursor
Create an interactive skill in .agents/uses-page/ that guides users through documenting their developer setup. Includes a system info detection script and a structured interview process covering hardware, software, and workflow, with export to markdown, HTML, JSX, or rich text. Made-with: Cursor
Create a step-by-step guide for adding your own /uses page to the directory: create your page, add your entry to data.js, and submit a PR. Includes field reference table, content ideas, and guidelines. Made-with: Cursor
List every technology powering the /uses directory: TanStack Start, Cloudflare Workers/D1/Vectorize, Drizzle ORM, Tailwind CSS, shadcn/ui, OpenAI, workers-og, unavatar, and more. Add SEO meta tags. Made-with: Cursor
Add a prominent hero section with the /uses title, description, people count, and a CTA linking to the /add page. Fix the "Add yours" link to point to the internal /add route instead of GitHub. Made-with: Cursor
- Add Avatar, Facts, SocialLinks, UsesUrl, ItemIcon, PersonCard components - Add fetch-item-images script and generated items data - Add DirectoryFacts type and getDirectoryFacts to data layer - Update dashboard with improved layout - Update d1 queries and server functions - Update route tree, package.json, and footer - Add todo.md Made-with: Cursor
- Added new dependencies: @radix-ui/react-popover, @radix-ui/react-tooltip, cmdk, ml-kmeans, shaders, and umap-js. - Removed unused dependencies: ml-kmeans and umap-js from package.json. - Updated styles for the body background in styles.css. - Enhanced FacePile component with tooltips for better user experience. - Introduced lazy loading for ShaderBackground in the root route. - Improved admin tags page with a new category combobox using popover and command components. - Cleaned up console logs in the Amazon search function. Made-with: Cursor
User item tag system
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


This pull request completely rebuilds the
uses.techwebsite to address scalability and usability issues.Key Changes:
/tags/:tagSlug) and each person (/people/:personSlug).tag,country,device, andsearch(q).src/data.js.cull-invalid-uses: To remove non-existent/usespages.scrape-uses-to-d1: To scrape/usespage content into a Cloudflare D1 database.generate-tag-metadata: To process and generate metadata for tags.sync-data-json: To synchronize data.src/data.jsfile structure and the existing README GitHub Action, as requested. The original CSS styling has also been preserved.Why these changes?
The previous site had become too large and difficult to use. This rebuild aims to provide a more performant, maintainable, and user-friendly experience by leveraging a modern stack, introducing better navigation, advanced filtering, and dedicated tools for data curation.
How to Test/Run:
npm installnpm run devhttp://localhost:3000in your browser.Useful CLI Commands:
npm run typechecknpm testnpm run buildnpm run cull -- --limit 50(dry run)npm run cull -- --apply(rewritesrc/data.js)npm run scrape -- --db uses-tech-scrapes --limit 50npm run generate:tag-metadataCaveats/Follow-ups:
wrangler.jsoncfor your deployment environment.src/generated/people.jsonsnapshot to ensure Cloudflare/ESM compatibility while respecting thedata.jscontract.Add your name to verify: Cursor