Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
c9e5cb2
Give Soonex a paper-cut identity with local fonts.
cursoragent Aug 26, 2026
444e4d5
Fix neo accent contrast on solid buttons for axe.
cursoragent Aug 26, 2026
c89a5ec
Fix waitlist toast for Corex 0.2 event names.
cursoragent Aug 26, 2026
e32854d
Keep the hero countdown on one row on phones.
cursoragent Aug 26, 2026
bd5b890
Force phone timers onto one row.
cursoragent Aug 26, 2026
8836c38
Restore Corex themes and rewrite the template in Lorem Ipsum.
cursoragent Aug 26, 2026
80e036e
Rebuild landing with Tailwind marketing sections and Corex lists.
cursoragent Aug 26, 2026
1758c95
Pin list arrows to the end of each data-list row.
cursoragent Aug 26, 2026
be2beb3
Round the sticky countdown chip.
cursoragent Aug 26, 2026
b38e40b
Patch mdex CVEs by overriding Tableau's 0.11 pin.
cursoragent Aug 26, 2026
aeace86
Fail fast when Tableau port 4999 is already bound.
cursoragent Aug 26, 2026
fbfeb34
Resolve Lenis by installing npm deps and renaming the wrapper.
cursoragent Aug 26, 2026
aac9e00
Drop Lenis and reuse the FAQ sticky split across sections.
cursoragent Aug 26, 2026
7d69077
Add Corex a11y dialog, theme overlays, and a product hero.
cursoragent Aug 26, 2026
bfc75f5
Rebuild Soonex as a production marketing template.
cursoragent Aug 26, 2026
78c64f5
Restore on-brand contrast tokens and name tooltip triggers.
cursoragent Aug 26, 2026
1b98fd5
Give Soonex a Framer-style waitlist layout and distinct themes.
cursoragent Aug 26, 2026
4426568
Put voice portraits beside the quote so they stay on screen.
cursoragent Aug 26, 2026
78ccb7d
Polish Soonex into a copy-ready launch template.
cursoragent Aug 27, 2026
ecf3fc0
Give each home band a unique heading for landmark names.
cursoragent Aug 27, 2026
d4b4f87
Give Soonex an editorial pass: Select nav, sticky beats, and token mo…
cursoragent Aug 27, 2026
5dadb3e
Show mobile nav Select labels; only clip the trigger text.
cursoragent Aug 27, 2026
39542d8
Give the four Corex themes a quieter professional motion language.
cursoragent Aug 27, 2026
e68c2f1
Make card hover a token shadow, not a lift.
cursoragent Aug 27, 2026
e5fe846
Give the toolchain marquee brand colors and Corex demo motion.
cursoragent Aug 27, 2026
0b8fc4c
Stop clipping header countdown digits.
cursoragent Aug 27, 2026
44f92a6
Turn the Product strip into a Corex clipboard clone command.
cursoragent Aug 27, 2026
29793ab
Give the Product clone control a solid Copy trigger.
cursoragent Aug 27, 2026
4e2ab0e
Dock calendar beat titles flush under the sticky header.
cursoragent Aug 27, 2026
463b7c0
Drop leftover reveal transforms so calendar titles can stick.
cursoragent Aug 27, 2026
cb987b5
Do not hold reveal transforms after the calendar enters.
cursoragent Aug 27, 2026
4ff5047
Fill calendar beats with quotes, cards, links, and data lists.
cursoragent Aug 27, 2026
f9e6580
Put calendar pull quotes in the story column.
cursoragent Aug 27, 2026
7d395a3
Render one FAQ paragraph per accordion item.
cursoragent Aug 27, 2026
d37e71e
Drop the waitlist photo and center the form.
cursoragent Aug 27, 2026
4956b56
Scale the header and footer lockup to ui-size-md.
cursoragent Aug 27, 2026
016bf03
Fill the accessibility trigger icon to the control size.
cursoragent Aug 27, 2026
188a735
Put the hero countdown above the headline.
cursoragent Aug 27, 2026
1d5caac
Give Soonex a premium Corex identity and real product copy.
cursoragent Aug 27, 2026
af9ec89
Give tabs full-width triggers and drop repeated data lists.
cursoragent Aug 28, 2026
82e213e
Force product tabs into equal columns and chip the plan labels.
cursoragent Aug 28, 2026
456d581
Let theme typography own headlines and rewrite the shipping-log copy.
cursoragent Aug 28, 2026
e2c5c6b
Keep mobile timer digits on a 2em strip so they do not clip.
cursoragent Aug 28, 2026
9fc9cb1
Restage Soonex as a near-white product landing.
cursoragent Aug 28, 2026
9caa914
Restore the hero waitlist card on the studio still.
cursoragent Aug 28, 2026
5fd7f09
Keep 1 September on one line when the headline wraps.
cursoragent Aug 28, 2026
0edc5ed
Make the accessibility trigger a normal filled button.
cursoragent Aug 28, 2026
ba0a9e4
Label the accessibility control as a normal filled button.
cursoragent Aug 28, 2026
81d96a9
Size the accessibility button with the Template Options cluster.
cursoragent Aug 29, 2026
a1550d3
Restage Soonex as a production Corex launch landing.
cursoragent Aug 29, 2026
88e46a5
Restage Soonex as a September product launch.
cursoragent Aug 30, 2026
a87444e
Restage Soonex as a surface instrument desk.
cursoragent Aug 30, 2026
06d830a
Restage Soonex as a typographic launch edition.
cursoragent Aug 31, 2026
2e7afb5
Restage Soonex as a Framer-style product launch.
cursoragent Aug 31, 2026
c5a363b
Restore cover thumbs on the log index cards.
cursoragent Aug 31, 2026
5ab368d
Rebuild Soonex as a shippable launch template with four skins.
karim-semmoud Sep 9, 2026
d95943f
Drop unused home modules left from the remote staging pass.
karim-semmoud Sep 9, 2026
60baa44
Harden for Corex 0.2.2 and mark Soonex 0.2.2 merge-ready
cursoragent Sep 14, 2026
955a9b1
Fail fast when inotify-tools is missing on Linux dev server
cursoragent Sep 14, 2026
4de76bc
Merge main into cursor/soonex-paper-cut-06f8
cursoragent Sep 14, 2026
d5945ba
Redesign Soonex home around Corex Design-only premium SaaS layout
cursoragent Sep 14, 2026
6975d9e
Align Soonex home with new-gen visual rhythm
cursoragent Sep 14, 2026
b77e00b
Restore Corex theme switcher and tech marquee; keep new-gen layout
cursoragent Sep 14, 2026
6adcd56
Fix grey marquee items and replace showcase cards with preview desk
cursoragent Sep 14, 2026
b6ae5a4
Enrich spotlight tab panels and restore default marquee styling
cursoragent Sep 14, 2026
447f2a4
Editorial redesign with Unsplash imagery, logo fixes, new journal, an…
karim-semmoud Oct 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"mcpServers": {
"corex": {
"url": "http://localhost:4004/corex/mcp"
}
}
}
14 changes: 0 additions & 14 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ on:
permissions:
contents: read

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
test:
name: Tests (OTP ${{ matrix.otp }} | Elixir ${{ matrix.elixir }})
Expand Down Expand Up @@ -56,17 +53,6 @@ jobs:
- name: Install Mix dependencies
run: mix deps.get

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: "24"
cache: npm
cache-dependency-path: assets/package-lock.json

- name: Install npm dependencies
working-directory: assets
run: npm ci

- name: Run tests
env:
WALLABY_CHROME_BINARY: ${{ steps.setup-chrome.outputs.chrome-path }}
Expand Down
14 changes: 0 additions & 14 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@ concurrency:
group: pages
cancel-in-progress: false

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
build-and-deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'push' && github.event.workflow_run.head_branch == 'main' }}
Expand Down Expand Up @@ -52,17 +49,6 @@ jobs:
- name: Install Mix dependencies
run: mix deps.get

- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: "24"
cache: npm
cache-dependency-path: assets/package-lock.json

- name: Install npm dependencies
working-directory: assets
run: npm ci

- name: Build static site
run: mix build

Expand Down
25 changes: 13 additions & 12 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@ There is one product: the static marketing/blog site. Standard commands live in
`mix.exs` aliases — prefer those; the notes below only cover non-obvious cloud gotchas.

### Toolchain activation
- The Elixir/OTP toolchain is provided by **asdf** (versions pinned in `.tool-versions`:
Erlang 28.3.1, Elixir 1.19.5-otp-28). Node/npm come from **nvm**. Both are activated by
`~/.bashrc`, so a normal interactive shell already has `mix` and `npm`.
- If a command reports `mix: command not found` or `npm: command not found` (e.g. in a bare
non-login shell), activate them first:
`. "$HOME/.asdf/asdf.sh"` and `export NVM_DIR="$HOME/.nvm"; . "$NVM_DIR/nvm.sh"`.
- Elixir/OTP versions are pinned in `.tool-versions` (Erlang 28.3.1, Elixir 1.19.5-otp-28). Use
**mise** (`mise install`) or **asdf** if present. There is no `assets/package.json`; Node is not
required for builds.
- If a command reports `mix: command not found` (e.g. in a bare non-login shell), activate the
toolchain first: `eval "$(mise activate bash)"` or `. "$HOME/.asdf/asdf.sh"`.

### Running / building
- Dev server: `mix tableau.server` → site at `http://localhost:4999` (home `/`, `/blog`, `/tags`).
In dev it also starts Corex MCP at `http://localhost:4004/corex/mcp`. Tailwind/esbuild run in
`--watch` mode and live-reload picks up changes to `lib/`, `_posts/`, `_data/`, `assets/`.
- Dev server: `mix server` (alias: port check, then `tableau.server`) → site at
`http://localhost:4999` (home `/`, `/blog`, `/tags`). In dev it also starts Corex MCP at
`http://localhost:4004/corex/mcp`. Tailwind/esbuild run in `--watch` mode and live-reload picks
up changes to `lib/`, `_posts/`, `_data/`, `assets/`.
- Adding a blog post = create a Markdown file under `_posts/` with `layout: Soonex.PostLayout`
front matter; the running dev server regenerates it automatically.
- Rebuild only assets: `mix assets.build`. Production build: `MIX_ENV=prod mix build` → `_site/`.
Expand All @@ -38,6 +38,7 @@ There is one product: the static marketing/blog site. Standard commands live in
### Gotchas
- Live reload needs `inotify-tools` (installed). If the dev server logs
`inotify-tools is needed ... fs_inotify_bootstrap_error`, the file watcher is disabled and content
changes won't hot-reload — restart the server after installing it.
- Port 4999 is shared by the dev server and the test harness. Stop `mix tableau.server` before
running `mix test`, otherwise the test's Bandit server can't bind the port.
changes won't hot-reload — restart the server after installing it. `mix server` fails fast on
Linux when `inotifywait` is missing.
- Port 4999 is shared by the dev server and the test harness. Stop `mix server` before running
`mix test`, otherwise the test's Bandit server can't bind the port.
40 changes: 40 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,45 @@
# Changelog

## 0.3.0

- Redesign the home page with an editorial layout: display-size hero with a photo stage and floating countdown, photo-backed live preview, capabilities bento grid, workflow tabs with steps and copy commands, a proof section with stats, image-led journal cards, FAQ, and a closing waitlist band over photography.
- Rewrite marketing copy as a product launch rather than template notes.
- Customize through Corex Design only: four themes (neo, uno, duo, leo) with light and dark modes in `config :corex_design`. Drop per-theme skin CSS and JS (`assets/css/skins/*`, `assets/js/skins/*`, `assets/css/layout.css`, `assets/js/landing*.js`).
- Keep the Template Options theme switcher (`assets/js/theme.js`, `Soonex.Theme`) and the Corex tech marquee with its default styling.
- Add `:photo` tone to `Soonex.Layouts.Section` plus display, tile, photo frame, and scrim helpers in `Soonex.Layouts.Shell`.
- Replace all photography with Unsplash abstract imagery (credited in the README); remove unused portraits and grain texture.
- Fix the JavaScript logo to the official yellow mark and restore the official Tableau project logo in place of the Tableau Software mark; remove unused tech icons.
- Replace the journal with six current posts, including a Markdown style guide post.
- Rename the scale section module to `Soonex.HomePage.Proof`; remove the unused `Soonex.HomePage.Trust`.
- Update `phoenix_live_view` to 1.2.12, `makeup` to 1.2.3, and `ex_slop` to 0.4.5.
- Rewrite the README.

## 0.2.2

- Harden for Corex 0.2.2+: drop `:corex_design` from Mix `compilers`; keep `mix corex.design.build` in `assets.build`, `pre.test`, and `build`; pin Corex family deps to `~> 0.2` with `corex_design` as `runtime: false`.
- Drop `assets/package.json` and Lenis; CI/deploy no longer run `npm ci`.
- Upgrade `a11y_audit` to `~> 0.5.0`; Wallaby axe check stays green on the home page.
- Add `mix server` (`soonex.port_check` then `tableau.server`) and restore AGENTS.md for Cloud Agent workflows.

## 0.2.1

- Restage the home as a production launch landing: full-bleed hero, waitlist object on the still, English section ids, and distinct band skeletons.
- Drop the three-up plan cards, Latin module names, and tech-icon footer. Log tease and four-room exhibit replace them.
- Upgrade Corex packages to 0.2.1 (`corex`, `corex_design`, `corex_mcp`).
- Keep stock Corex themes (neo/uno/duo/leo) and self-host their type stacks.
- Production marketing chrome: SVG lockup, sticky condensed header, waitlist-card hero, full-width timer.
- Overlay every allowed Corex design key (seeds, light/dark colors, radius, font, typography) plus top-level `scales:`.
- Home bands each use one signature component (carousel, data_table, tabs, collapsible, date_picker, tooltip). FAQ keeps the sticky split.
- Blog, tags, and 404 use `layout_heading`, article cards, and pagination instead of `data_list` rows.
- Header countdown uses `hidden` + `inert` until past the hero sentinel (no transform peek).
- Drop homepage/blog BEM CSS in favor of inline Tailwind + Corex tokens.
- Use the common Tailwind marketing section (`py-24` / heading cluster / `mt-16` body) with a full-bleed stage (`max-w-[90rem]`).
- Override Tableau's `mdex ~> 0.11.1` pin to `mdex ~> 0.13.2` (CVE-2026-53426 / 53427 / 53428 / 53429 / 54888 / 54889).
- Add `mix soonex.server` / `mix soonex.port_check` so a taken :4999 fails with the occupant instead of Tableau's premature “server started” log.
- Drop Lenis and `assets/package.json`; native `scroll-smooth` is enough.
- Enable Corex accessibility (`accessibility: true`) with the official `--a11y` dialog (localStorage, no Phoenix plug). `corex_design` is a runtime dependency for that.
- Tiny `hosts.css` after `corex.css`. No token opacity.

## 0.2.0

- Upgrade to Corex 0.2 (`corex`, `corex_design`, `corex_mcp`); replace Designex with `mix corex.design.build`.
Expand Down
Loading
Loading