The problem
Enpramex Global sources, ships, stores, blends and trades energy commodities across more than 13 countries, with a Houston headquarters and offices in Beverly Hills, Mexico City, London, Rotterdam and Abu Dhabi. Its existing site was an unfinished page builder that could not carry the brand, the product catalogue or the distribution story, and it spoke two languages to a company that trades in dozens.
Behind the public site, two internal audiences had nothing at all: employees spread across six offices with no shared place for announcements, training and tasks, and a growing set of vendors being onboarded over email attachments. The brief became three products on one visual identity: a corporate site that reads as a global company, an employee portal, and a vendor portal where compliance documents live under real access control.
Constraints we chose
- No framework for the public site: A corporate site should outlive its dependencies. The generator is Node's standard library and nothing else, and the output is plain files any host can serve.
- Translate the source, not the markup: Fifty-one languages cannot mean fifty-one copies of every page. Every string keys off its English text, and languages are data.
- Isolation in the database: For both portals, who can see what is decided by Postgres policies, not by the React code that happens to be running.
- Claim only what the client claims: Region and office copy restates what the company already publishes. Where real operating detail was missing, the page says less rather than inventing terminal counts or volumes.
The corporate site
Thirty-seven pages from one script
The build script holds the chrome, the bilingual content and the data arrays for offices, products, regions, risk functions, news and navigation. Eight product pages, from naphtha and fuel oil to sustainable aviation fuel and renewable gasoline, are generated from product entries. Eight region pages, the United States, Canada, Mexico, Europe, the Middle East, Africa, South America and Asia Pacific, come from region entries, plus two US retail pages for the branded and unbranded wholesale programmes. Company, trading, risk management, trading offices, transport modes, green approach, media room, careers, contact and the legal set complete the 37, with a separate language gateway.
How 51 languages fit in one codebase
Every visible string carries its English source as a data attribute, and Spanish inline. For the other 49 languages a client script fetches one flat JSON dictionary per language, once, and swaps text by looking up the English. Precedence is inline attribute, then dictionary, then English fallback. Arabic, Urdu and Persian toggle the document to right-to-left, with dedicated RTL rules in the stylesheet and map labels pinned left-to-right so markers do not slide off their coordinates. An extraction tool rescans the built HTML into a corpus, and a validator reports coverage per language, so the common failure, new copy never back-filled, shows up as a report rather than a mystery.
The employee portal
Invite-only by construction
One audiences table for everything
Training that counts completion
Publishing as a trigger, scheduling as a cron
The vendor portal
The vendor portal is the sibling of the employee portal, same stack and design system, its own isolated backend, and a harder problem: many organizations that must never see each other, sharing one auth pool with Enpramex staff.
Two trust domains, one auth pool
A state machine in the database
Documents that cannot be edited
Announcements and audit
Problems worth talking about
Russia across the dateline
Eighteen keys or six
Glass without seams
Failing closed on suspension
Where it stands
Reported honestly
The corporate site is live and public. The employee and vendor portals are built, tested and deployable, with their production rollouts gated on the client's SMTP and domain configuration. The numbers here are counts from the repositories: pages, languages, dependencies, products. We do not publish traffic, employee or vendor counts for a client platform, and the region copy on the site deliberately claims no volumes the company has not published itself.
Adding a language never touches page markup. You only add a JSON file.
— Enpramex Global engineering notes
What This Project Does Well
Technologies Used
Corporate site: static HTML, CSS and vanilla JavaScript generated by a zero-dependency Node ESM build, inline SVG maps from Natural Earth data, JSON i18n dictionaries, Vercel. Portals: Vite, React 19, TypeScript strict, Tailwind CSS 4, shadcn/ui, TanStack Query, React Router 7, Supabase (Postgres, Auth, Storage, row-level security, Edge Functions, pg_cron), Playwright, Vercel
Ready to Build Something Similar?
Let's discuss how we can help transform your business with a custom digital solution.
