bigtech-sucks/packages/web/vite.config.ts
CLU aafce7773b feat: the hook prober, and the list becomes the front door
Christian: 'drop any URL and say tell me where Big Tech has its hooks... we're
not just rating software, we're rating software as a service.'

db/hooks/probe.mjs answers that from public records only: DNS, MX, SPF, ASN via
Team Cymru, HTTP headers, and the third-party hosts named in the page's own HTML.
Nothing is scanned. If a site tells the world it sends mail through Google, this
reads it.

Verified live, 2026-10-29:
  parler.com   -> AS16509 AMAZON, plus Microsoft email, plus Vercel
  netflix.com  -> AS40027 NETFLIX (their own Open Connect edge), NOT AWS
  signal.org   -> Cloudflare CDN, Google touchpoints
  bigtech.sucks-> AS16509 AMAZON (GoDaddy parking sits on AWS)

That netflix result is the important one. The front door is Netflix's own network;
the catalog and user data are in AWS. Edge ASN is not backend custody, and the tool
says so in its own header comment rather than pretending otherwise.

Also:
- The list is now the front door (public/index.html, generated from the DB).
  The game moved to /game.html and keeps working, ready for its own subdomain.
- suggestion table + v_requested view: anyone can ask for a product to be rated,
  no account, no email. Optional contact. Addresses are salted-hashed, never stored.
- POST /api/suggest on the existing server package, with a graceful fallback on the
  static page to a Forgejo issue so requests are never lost when the server is down.
2026-10-29 17:23:11 -05:00

26 lines
No EOL
681 B
TypeScript

import path from 'node:path';
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@bigtech-sucks/core': path.resolve(__dirname, '../core/src/index.ts'),
},
},
build: {
rollupOptions: {
// The front door is the generated rating list in public/index.html.
// The game is a separate page at /game.html, and will move to its own
// subdomain when it becomes its own funnel.
input: { game: path.resolve(__dirname, 'game.html') },
},
},
server: {
port: 5173,
proxy: {
'/api': 'http://localhost:3001',
},
},
});