brand-website — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited brand-website (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill guides you through creating and maintaining brand/corporate websites built with Astro 5.x, Tailwind CSS v4, and React islands for interactivity. The architecture is designed for enterprise marketing sites that need static rendering, excellent SEO, bilingual content (zh-TW / en), and minimal client-side JavaScript.
src/
pages/[locale]/ ← Route pages (.astro), generates /zh-TW/... and /en/...
components/
layout/ ← Navbar, Footer, PageLayout, MobileMenu
sections/ ← Reusable page sections (Hero, CTA, TrustBadges)
ui/ ← Primitives (Button, Card, Badge, SectionTitle, Accordion)
visuals/ ← Diagrams and animated graphics (some are React .tsx)
i18n/
zh-TW.json ← Traditional Chinese content (default locale)
en.json ← English content (must mirror zh-TW structure)
utils.ts ← getTranslation(), getLocalePath(), locale types
layouts/
BaseLayout.astro ← HTML shell with <html lang>, fonts, meta, CSS
styles/
global.css ← Tailwind v4 @theme tokens, custom utilitiesContent lives in src/i18n/zh-TW.json and src/i18n/en.json, not in page files. To change text:
home.hero.headline)Follow this sequence — each step builds on the previous:
Step 1: Add content to locale files
Add a new top-level key in both src/i18n/zh-TW.json and src/i18n/en.json:
{
"meta": {
"newPage": { "title": "頁面標題", "description": "頁面描述" }
},
"newPage": {
"hero": { "headline": "...", "subtitle": "..." },
"sections": [ ... ],
"cta": { "headline": "...", "button": "..." }
}
}Both files must have identical key structure. zh-TW values are in Traditional Chinese, en values in English.
Step 2: Create the page file
Create src/pages/[locale]/new-page.astro. Read references/page-template.md for the exact boilerplate. Every page follows this pattern:
---
import BaseLayout from '../../layouts/BaseLayout.astro';
import PageLayout from '../../components/layout/PageLayout.astro';
import { locales, getTranslation, getLocalePath } from '../../i18n/utils';
import type { Locale } from '../../i18n/utils';
export function getStaticPaths() {
return locales.map((locale) => ({ params: { locale } }));
}
const locale = Astro.params.locale as Locale;
const t = getTranslation(locale);
---
<BaseLayout title={t.meta.newPage.title} description={t.meta.newPage.description} locale={locale} currentPath="/new-page">
<PageLayout locale={locale} currentPath="/new-page">
<!-- sections here -->
</PageLayout>
</BaseLayout>Key points:
getStaticPaths() generates both /zh-TW/new-page and /en/new-pagecurrentPath must match the URL path segment (used for language switcher and hreflang)t (the translation object), never hardcodedStep 3: Add navigation (if needed)
If the page should appear in the navbar:
nav in both locale filessrc/components/layout/Navbar.astro in the navLinks arraysrc/components/layout/Footer.astro if appropriateStep 4: Verify
Run npm run build and confirm the page appears in the output for both locales.
references/component-catalog.md for available componentscomponents/sections/ for full-width page sectionscomponents/ui/ for small reusable primitivescomponents/visuals/ for diagrams or animated graphics.astro for static components, .tsx (React) only when client-side interactivity is required (animations with framer-motion, state like accordion open/close, mobile menu toggle)Most components should be .astro (zero client JS). Use React .tsx only when the component needs:
When using React islands in Astro pages, specify a client directive:
client:load — for immediately interactive components (mobile menu)client:visible — for components that animate on scroll (preferred for diagrams)Read references/design-tokens.md for the full token list.
Colors: dark navy background (#0F172A), cyan primary (#06B6D4), purple accent (#8B5CF6), glass-card semi-transparent surfaces
Typography: Inter (primary) + Noto Sans TC (Chinese fallback)
Key CSS utilities defined in `global.css`:
.glass-card — semi-transparent card with backdrop blur and border.gradient-text — cyan-to-purple gradient text effect.text-glow-cyan / .text-glow-purple — subtle text shadow glow.glow-cyan / .glow-purple / .glow-amber / .glow-emerald — box shadow glowLayout patterns:
max-w-7xl mx-auto px-4 sm:px-6 lg:px-8py-20 or py-24bg-surface-panel border-y border-white/5bg-surface-darkAfter any change, verify:
npm run build — check for errorsdist/zh-TW/ and dist/en/<a href> use getLocalePath(locale, '/path')For detailed information, read these files from the references/ directory:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.