Astro + Tailwind foundation for the devitocodes.com redesign#1
Open
ggorman wants to merge 19 commits into
Open
Astro + Tailwind foundation for the devitocodes.com redesign#1ggorman wants to merge 19 commits into
ggorman wants to merge 19 commits into
Conversation
…ew CI - Token-driven theming (src/styles/tokens.css) so design variants are a palette swap - Shared content/data layer (src/data/*.ts) consumed by all components - 15 Jekyll posts migrated to an Astro content collection (slugs preserved) - DevitoPRO vs open-source feature comparison ported from features.md - Marketing IA: hero, trust bar, trilemma, solution, benchmarks, use cases, comparison, case studies, team, CTA; plus features/about/case-studies/contact/ blog and policy pages - Base-path aware (links, assets, Markdown images) for subpath previews - GitHub Pages CI: deploy.yml (main -> root) and preview.yml (variant/** -> preview/<name>/)
…mailto On submit, JS opens the visitor's mail client with name/email/company/message pre-filled (subject + body), going straight to our inbox — no third-party form service or account. Direct email link + noscript note as fallback. Removes the unused formspreeId from site config. Addresses the [high] finding from the Codex adversarial review.
…t research - Position against building/maintaining an in-house FD compiler (hero, trilemma) - Benchmarks framed vs in-house baselines; reproducible + supported - Add 'Embed in your stack' (decoupler) use case for ISV buyers; sharpen multi-GPU/ GPU-aware MPI and very-large-model (compression/streaming/mixed precision) - Final CTA speaks to operators, ISVs and hardware partners No client names, quotes or specific benchmark numbers (sanitised per data-handling policy).
… the preview deploy race
… kernels vs DSL+compiler The previous VOC line implied clients maintain FD compilers (they don't — no one in the sector does). Reframe to the real status quo: hand-coded RTM/FWI kernels locked to one physics, one discretization, one programming model, rewritten for every new processor generation. Lean on the 'painting the Golden Gate Bridge — and building several at once' analogy. DevitoPRO's edge = the only DSL + compiler in seismic imaging that regenerates the optimized kernel for every architecture and processor generation. Edits: hero.subtitle, trilemma.intro, benchmarks.intro, finalCta.body. No new components, no client names/numbers.
…c imaging built for production' Small accent kicker under the subtitle, before the CTAs, using the existing .eyebrow style for a stamped-credential feel. Makes the uniqueness claim explicit on first view.
Adversarial review (Claude + Codex + Gemini) drove this consolidated foundation update before the team vote — all approved decisions + consensus polish in one commit so variants only need one more rebase. Aquawax Pro typography (Zetafonts EULA 1wp3-855llosp/94575, web tier, single domain devitocodes.com, WOFF2 only, self-hosted, =< 25k pageviews/month): - src/assets/fonts/: Regular/Medium/Demibold/Bold/Heavy (5 weights, ~353KB) - @font-face in global.css + --font-sans token => 'Aquawax Pro' - Drop Inter from Google Fonts <link>; keep JetBrains Mono for code/mono utilities - public/robots.txt disallows /fonts/ and /_astro/ (anti-extraction hygiene) - EULA archived at licenses/Aquawax-Pro-EULA-94575.pdf (not under public/) User-approved decisions from the trio interview: - Brand teal #55c6a3 locked as primary accent (tokens.css + recolored devito-logo.svg #62C2A4 -> #55c6a3 to match) - Differentiator promoted from eyebrow style to a hero badge above the CTAs - CTA naming aligned: 'Compose email' button -> 'Email to schedule a call' - Hero subtitle tightened to one sentence + new supporting line below Consensus polish (applied automatically): - Hero section gets 'isolate' so the wavefield image is actually visible (was hidden by the section's opaque bg-base because the -z-10 wrapper was escaping the section's stacking context) - Integrate real logo SVG in Nav + Footer (was generic CSS accent square) - Remove 'Built with Astro / deployed on GitHub Pages' footer tagline; replace with company registration (no. 12437078, England & Wales) - Fix migrated typo 'Propogators' -> 'Propagators' in IM.md - Move public/images/sources/*.graffle out of public/ (design-sources/) so OmniGraffle source files don't ship on the live site - Neutralise content.ts header comment (drop 'Slack market research' provenance leak) - Benchmark charts wrapped in <a target=_blank> for full-size view + h-56 -> h-80; 'click for full size' caption
Per team feedback (Jack Betteridge, Mathias Louboutin): light/dark switch is a standard 2026 dev-tool pattern (projector use case in particular). - src/styles/tokens.css: dual-mode (:root for light, :root[data-theme="dark"] for dark, @media (prefers-color-scheme: dark) :root:not([data-theme="light"]) for system-pref fallback). Brand teal #55c6a3 unchanged in both modes. - src/layouts/Base.astro: inline FOUT-prevention <script is:inline> in <head>; sets <html data-theme> from localStorage or matchMedia before paint. - src/components/Nav.astro: sun/moon toggle button (a11y: aria-label, aria-pressed, focus-visible). Always-visible; rearranged into a right-cluster wrapper so flex layout stays clean on desktop + mobile. - src/styles/global.css: .theme-icon-{sun,moon} display rules track [data-theme]. Variants will get their own dual-mode tokens.css in the next batch (preserving each variant's character in its primary mode).
Fabio: - Unbold 'Devito' wordmark in nav + footer (font-extrabold -> font-medium) - Benchmarks: qualitative cards, no numbers in copy, vendor-balanced (GPU portability across NVIDIA/AMD/Intel + CPU portability + cloud price-performance + large-model scale). Inline 'Request benchmark report' CTA replaces the chart-image cards. - Solution 'How it works': replace OSS code snippet with an inline SVG architecture diagram (Physics -> Devito compiler -> Optimized kernels per architecture, with a dashed regenerate-loop). Vendor- and entry-point-neutral. - Blog dates removed from /blog index listing and homepage CaseStudies cards. Post-page header still shows the date for context once opened. - Blog audit: hide 5 posts via draft:true in front-matter — v4.8.7 (point release), image2023 (past event), cluster (superseded by cluster-v2), thematrix (superseded by benchmarking), launch (2020 origin — relocated to /about as the company's origin story). draft field added to the blog schema; /blog index + CaseStudies filter !draft; [...slug] route still serves all URLs so backlinks to /blog/launch (and the others) keep working. Mathias: - /features restructured: simplified main capabilities list on top (FeatureHighlights component, 6 groups), full vs-OSS comparison table tucked into a collapsed <details> below at #compare. - Homepage's condensed vs-OSS table replaced with the same highlights list (4 groups) + 'Compare with open-source Devito' link. Holds (NOT in this batch, per Gerard's caution about unannounced items): - DevitoHorizon — wait for launch sign-off. - Audience segmentation (per-client entry-point preferences) — needs fuller IA work post-vote. - Team page additions — awaiting names.
…o Codes' wordmark + show all 6 team members - tokens.css: promote dark-enterprise dual-mode palette into the foundation (cool-white in light, deep-navy in dark). Brand teal #55c6a3 unchanged. Header comment updated to reflect the consolidation context. - Nav + Footer: 'Devito Codes' is one company name — drop the <span class='text-muted'>Codes</span> split that made 'Codes' look like a separate muted afterword. Single weight, single colour, plain text. Logo img alt updated from '' to 'Devito Codes' since the wordmark text no longer redundantly carries the name. - TeamTeaser: small team — show all 6 members on the homepage rather than truncating to 4. Grid widens to grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 so 6 members fit one row at desktop, 3 × 2 at tablet, 2 × 3 at mobile. Name + role typography compresses one notch to suit the smaller cell.
… widen grid to grid-cols-2 sm:grid-cols-3 lg:grid-cols-6 Followup to the round-2 consolidation commit — the TeamTeaser update should have been part of that commit but the Write tool rejected the file (no prior Read), so it landed separately.
ROOT CAUSE
Tailwind v4 auto-generates a text-{name} *colour* utility for every --color-*
key in @theme. Our @theme declared --color-base, which created a custom
.text-base { color: var(--color-base) } rule that collides with Tailwind's
built-in .text-base { font-size: 1rem } typography utility.
Both rules apply (different properties), but since the colour rule sits inside
the auto-generated utilities layer it overrides any earlier text-{colour} on
the same element. Any element with md:text-base + text-{colour} silently
flipped its text to var(--color-base) — the *page background* — producing
invisible same-on-same text.
Verified bug:
· HeroEnterprise spec strip <dd>: contrast 1.09 (dark) / 1.06 (light)
· Hero.astro supporting line: text-base text-muted/80
· LogoBar partner wordmarks at md+: md:text-base text-ink/60
FIX
- @theme: --color-base → --color-page (so the colliding utility is no longer
generated). The internal token --c-base stays — only the Tailwind-facing
key changed.
- bg-base → bg-page across all components/pages (Nav, Hero, LogoBar, CTA,
Section, contact form). text-base in Hero + LogoBar now correctly resolves
to font-size only, and the colour comes from the explicit text-{colour}
utility.
- Added a long block comment in global.css documenting the footgun so future
edits don't reintroduce it.
Team review (Mathias + Ed) ranked variant/enterprise #1 — 'Better to the point, no clutter' / 'still has some wonky phrasing but most clear'. Promoted that variant's homepage + HeroEnterprise to the foundation; the other three variant branches are being retired in a follow-up commit. Content polish in the same commit: · Vendor lists alphabetised everywhere (Gerard) — removes any signal of bias toward one partner: - Architectures: AMD · Arm · Intel · NVIDIA - Backends: CUDA · HIP · MPI · OpenMP · SYCL - Deploy: AWS · Azure · GCP · On-prem - trustBar: AMD · Arm · AWS · Azure · Google Cloud · Intel · NVIDIA · Workloads slot reframed (Gerard) — 'RTM · FWI · Elastic · VTI · TTI' was too narrow. New value: 'RTM · FWI · custom propagators and workflows' — keeps the familiar acronym anchors, opens the door explicitly to build-your-own (implicitly covers MP-FWI, EFWI, LS-RTM etc without enumeration). 'and workflows' gestures at the Decoupler / embed-in- your-stack story. · Custom-solver story now FIRST in FeatureHighlights (Ed: 'never mentions that you can actually write your own custom solvers!'). New top group 'Symbolic DSL · custom physics' with three items covering symbolic Python authoring, customisable stencils/BCs/sources/adjoints, and the Decoupler integration path. · Section order on the homepage (Ed: 'fairly random'): now Hero → LogoBar → Capabilities → UseCases → Benchmarks → Specification → CaseStudies → Team → CTA. Reads as what → where → proof → spec deep-dive → social. Anchors #capabilities and #compare preserved. Codex copy-review on content.ts / features.ts / 3 components is queued as a follow-up.
ggorman
added a commit
that referenced
this pull request
May 27, 2026
…e,two-tier} subdirs After Round 3 consolidation, variant/enterprise (the team's #1 choice) was promoted into the foundation; variants dev-tool, narrative and two-tier were retired. This commit removes the four corresponding deployed preview directories from gh-pages so the deployed tree matches the active branch set — only the consolidated foundation preview remains at /preview/astro-foundation/.
KEPT (per Gerard's call on the 3 judgement items surfaced):
- hero.differentiator: 'The only DSL + compiler in seismic imaging built for production'
stays — defensible from the Slack market research, distinctive, owned by sales.
APPLIED (mechanical / error / consistency):
- trilemma.title: 'Stop trading performance for portability for productivity.'
→ 'Stop choosing between performance, portability and productivity.'
('for...for...' cadence was awkward)
- trilemma.intro: dropped the Golden Gate metaphor for a more direct rewording
(Gerard's preferred wording — keeps the concrete RTM/FWI 'tied to a specific
physics, discretisation, programming model and processor' point but drops
the bridge analogy that was reading as decorative).
- benchmarks.intro first sentence: 'Iso-acoustic and acoustic-TTI propagators,
autotuned per target — including against hand-coded in-house kernels.'
→ 'Isotropic acoustic and acoustic TTI propagators are autotuned per target
and benchmarked against comparable hand-coded kernels where available.'
('Iso-acoustic' was non-standard; 'including against' was awkward.)
- benchmarks.cards 'Cloud price-performance' body: dropped the unclear
'DevitoPRO keeps both portable' — workload-portability across instance
families now stated directly.
- benchmarks.cards 'Large-model scale' body: fixed ungrammatical
'disk-host-GPU transfer' → 'disk-to-host-to-GPU transfers'; 'biggest models'
→ 'large production models' (less marketing inflation).
- useCases 'Embed in your stack': capitalised Decoupler API consistently
('decoupler' → 'Decoupler API'); softened the casual 'drop ... into an
existing inversion engine' to 'integrate ... into existing inversion
engines'.
- HeroEnterprise spec strip 'Backends' label → 'Programming models' + added
OpenACC (was missing relative to the trilemma copy that already lists it).
Value remains alphabetical: CUDA · HIP · MPI · OpenACC · OpenMP · SYCL.
('Backends' was technically inaccurate for MPI, which is a communication
runtime not a backend.)
- featureIntro: cut 'an advanced extension of' and the clunky 'features
demanding production workflows require'; tighter wording.
- featureCategories: fixed 'Source/receivers' (singular/plural mismatch)
→ 'Sources and receivers'.
- featureCategories FLOP-reduction row (the most consequential bug Codex
caught): the table read oss='Comprehensive', pro='Advanced' — making OSS
Devito look STRONGER than DevitoPRO on this row. That's almost certainly
a porting typo from the legacy Jekyll source. Per Gerard's call: change to
oss='Standard', pro='Comprehensive' (Pro should be the stronger qualifier;
matches the FeatureHighlights line that already says 'Comprehensive FLOP
reduction').
…ata streaming (disk → host → GPU)' Followup to the Codex copy review. The benchmarks card body and useCases copy were fixed in the previous commit, but the row label in the vs-OSS table (rendered inline on the homepage Spec section + on /features#compare) still read the ungrammatical 'Intelligent data-streaming disk-host-GPU'. The arrow form matches the Codex rewrite of the homepage card body. (Blog post src/content/blog/elastic.md keeps its original wording — legacy technical content is out of scope for this round.)
Alphabetical between Intel and NVIDIA. NextSilicon is a target architecture DevitoPRO supports; the spec strip should reflect that. (Note: OpenACC was already added to the Programming models slot in the Codex copy review pass yesterday — confirmed live before this edit.)
…t-unrendered copy
Adds NextSilicon to all the surfaces where it should appear alongside the
spec strip:
- src/data/content.ts trustBar.partners: inserted alphabetically between
Intel and NVIDIA. Visible on the homepage LogoBar.
- src/data/features.ts featureCategories: the 'Support for all major CPUs
and GPUs' category becomes 'Support for all major CPUs, GPUs and
accelerators' (the existing scope was already wrong — Intel KNC/KNL are
accelerators, not CPUs/GPUs). NextSilicon added as its own row with
oss=false / pro=true (assumed PRO-only; happy to flip if it's also in
the OSS path). The old Intel KNC/KNL row is relabelled '(legacy)' so
evaluators see at a glance it's not the recommended path.
- src/data/content.ts hero.supporting + trilemma.pillars[1].body: the
vendor list in each was updated and alphabetised
('AMD, Arm, Intel, NextSilicon and NVIDIA'). Neither string is rendered
by the current consolidated HeroEnterprise homepage, but both stay in
the data layer for /about, Trilemma re-use, or any future hero variant.
(GPU portability benchmark card body still names 'NVIDIA, AMD and Intel
GPUs' deliberately — NextSilicon is not a GPU and was left out of that
specific sentence.)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebuilds devitocodes.com as a modern Astro + Tailwind marketing site for DevitoPRO. The current Jekyll site is untouched.
What's here
/,/features,/about,/case-studies,/contact,/blog(+ posts),/Code_of_Conduct,/Data_Protection_Policy.features.md; team fromabout.md; real benchmark/seismic imagery reused.deploy.yml(main → root) andpreview.yml(variant/** →preview/<name>/).Notes / follow-ups
benchmarking) uses a Mermaid code block — renders as code until a Mermaid integration is added (optional).Review
This PR is the shared foundation. The three design directions land as separate
variant/*PRs, each with its own preview URL.