Skip to main content
home35 Designs
All workPlatform

Amino20 Labs

Amino20 Labs sells research-grade peptide reagents to verified laboratories only, and that rule lives in the code rather than in a checkbox. Behind the storefront is the platform that enforces it: rule-based buyer verification with a human review queue, attestations written to the database, a staff area on its own sign-in system, an AI assistant grounded in the live catalog, interactive 3D structures, and a commerce layer that keeps the storefront independent of any one platform.

Home page of Amino20 Labs

At a glance

Type
Platform
Industry
Research supplies
Built with
Next.js 16, TypeScript, Postgres on Neon, Clerk, the Anthropic API, 3Dmol.js
Timeline
August to October 2026, 72 commits
Codebase
About 14,600 lines of TypeScript, 38 pages, 6 API routes
Catalog
17 compounds, 11 with 3D structures

A purchase gate that fails closed

Anyone can browse, build a cart and see a subtotal. Prices are resolved on the server from the catalog on every render, never taken from the browser, and the cart is keyed to an HTTP-only cookie, so a cart built before signing in survives sign-in.

The gate is at checkout. The checkout page and the attestation step both call one server-side check, and no session, or no approved application, means no order.

Applications are scored against rules the admin sets: the email domain's type, whether it has MX records, a disposable-inbox list, business registration, address classification and phone. Clean results activate at once. Anything flagged goes to a review queue with the signals that fired, so a person can still approve a small lab on a free email address. A flag never rejects on its own.

Attestations are database rows, not just ticked boxes. The application and checkout each write one, and the application's row records the network address and browser it came from.

  • Amino20 Labs home page: featured BPC-157 vial, studied-in tags and the Dr. Amino greeting
  • Amino20 Labs home page on a phone

Two sign-in systems, on purpose

Buyers sign in with the store's own sessions: a signed JWT cookie and bcrypt-hashed passwords. Staff use Clerk with sign-up restricted, plus an allowlist checked on every admin page and inside every server action, because server actions can be posted to directly. A buyer session never grants staff access, and a staff account never grants ordering.

Adding an admin creates the account directly rather than sending an invitation, which restricted sign-up could never redeem. Removing one runs the last-admin check and the delete in a single locked transaction, so two admins can't remove each other at the same moment. Without Clerk keys the staff area answers 503 and the store carries on.

Display copy such as compound type names is editable in the admin. Every change is recorded with its author, the time, and the old and new values.

Dr. Amino

Dr. Amino is the store's assistant. Its system prompt is built from the live catalog, including names edited in the admin, so its answers follow what the site shows. The catalog part is cached between requests, and the owner's own instructions sit on top.

The owner picks the provider and model in the admin: Claude, or OpenAI, Gemini or Grok through the OpenAI-compatible API. Keys are encrypted at rest with AES-256-GCM and never reach the browser.

The model is only told which page the visitor is on when the page matches a known shape, so a crafted URL can't put text into its instructions. Conversations are capped at 20 turns of 2,000 characters, requests are throttled per address, and provider errors go to the server log while visitors get a plain message.

  • Catalog of all compounds with category filters, vial images and add-to-cart buttons

3D structures and the commerce boundary

Product pages show interactive 3D structures. A build script looks each compound up in PubChem by CAS number, never by name, and uses the record only if its formula matches the catalog. Where PubChem publishes a 3D conformer it is used as is; otherwise RDKit computes one, and the viewer says the geometry is computed. 3Dmol.js loads only on pages that show a molecule, and the spin stops for reduced motion.

Storefront code imports commerce from one internal module only. Platform SDKs sit behind it as providers, Shopify and a mock, and an ESLint rule rejects any other import. The provider is chosen by configuration, so the commerce backend can change without touching the storefront.

Content is checked as well as code. A compliance check over the site copy runs before every build, and a separate script compares each stored literature citation with its PubMed record.

  • Quality page explaining where the material comes from and how each lot is tested

Highlights

  • A purchase gate that fails closed: no session or no approved application, no order.
  • Rule-based verification that sends flags to a person with the signals attached, and never rejects on its own.
  • Separate buyer and staff sign-in, with the staff allowlist checked inside every server action.
  • An AI assistant grounded in the live catalog, with provider keys encrypted at rest.
  • A commerce adapter enforced by lint, so the storefront never imports a platform SDK.

Let's talk.

Tell me what you're building. I read every message myself and usually reply within one business day.