Theming
Goal: make the portal look like yours — your colors, type, and layout — without fighting a design system. The template is plain Next.js + Tailwind, so theming is just editing code.
No magic theme layer
PortalJS doesn't ship a theme runtime or a config you fight. Styling is ordinary
Tailwind utility classes on plain components — change them and the portal changes.
The AI path — bring your own DESIGN.md
The cleanest way to brand a portal with an AI assistant is to hand it a design
brief — a DESIGN.md in the repo that states your brand foundations: color tokens,
type, and layout posture. The assistant reads it and applies those tokens across
tailwind.config.js, styles/globals.css, and the components.
A brief is short and concrete. For example:
# Brand foundations
## Color tokens
- accent: #2563eb (primary)
- bg: near-white canvas
- fg: slate ink (#1e293b)
- border: hairline gray
## Type
- Display + body: Inter / system sans — weight contrast carries hierarchy.
- Mono: JetBrains Mono — for IDs and code.
## Layout posture
- Generous whitespace, light canvas. Hairline 1px borders, 12–16px card radius,
no heavy shadows. One accent color.
Then ask: "Apply the branding in DESIGN.md to this portal." Because the output is plain code, you can review and tweak every change by hand afterward.
The by-hand path
Everything the brief drives, you can edit directly:
- Colors and fonts — extend the palette and
fontFamilyintailwind.config.jsundertheme.extend, then use the new utility classes in your components. - Global styles and CSS variables — set brand tokens (e.g.
--accent,--bg) instyles/globals.cssand reference them from components or Tailwind. - Layout and components — the components in
components/(Table,Chart,Map) are small and swappable. Edit their classes, or replace them entirely with your own design-system components — the data-loading logic is independent of the markup.
Notes
- Bring your own stack: the template never forces a frontend toolchain on a team that already has one. Adopt the whole template, or lift the skills and components into an existing app — see Core concepts.
- Tailwind Typography: the template includes
@tailwindcss/typography(theproseclasses) for long-form text — handy for dataset descriptions and docs-style pages.