We usually build portals with Next.js or React and TypeScript, with Node.js frameworks such as Fastify or with Supabase in the backend. For sign-in, we use established services such as Supabase Auth or Amazon Cognito instead of building our own password handling. Payments and subscriptions run through Stripe with signature-verified webhooks.
We enforce the separation between customers as close to the data as possible: on PinnDeals, Row Level Security is enabled on every table, and database functions identify the user from the session only. At ADG Sales, permissions follow a matrix of domains, groups and individual rights, and every write request is logged with a before and after comparison. All data is transmitted encrypted.