Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); chore: back-merge production into main by Darkest-Teddy · Pull Request #577 · SaplingLearn/Sapling · GitHub
Skip to content

chore: back-merge production into main - #577

Open
Darkest-Teddy wants to merge 9 commits into
mainfrom
production
Open

chore: back-merge production into main#577
Darkest-Teddy wants to merge 9 commits into
mainfrom
production

Conversation

@Darkest-Teddy

@Darkest-TeddyDarkest-Teddy commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Restores the ancestry make promote requires. Merging this leaves main's tree byte-identical to what it is now.

Read the Files-changed tab with care. GitHub renders a PR as a three-dot diff (merge-base → head), so this one displays the whole v5 landing port — 83 files, +12,997/−6,206. That is not what merging does. main already contains every one of those files, with identical content, because the port took origin/main's files verbatim. The merge result is a zero-byte change; see the verification below.

Why

production carries 6 commits main doesn't:

make promote's preflight blocks with production-diverged whenever production holds commits that were never back-merged, and that guard has no override flag — without it the merge step would fail only after migrations had already applied to the production database. This clears it.

Verification

Merging origin/production into origin/main locally:

  • auto-merges with no conflictseslint-suppressions.json, globals.css and lib/api.ts each resolve on their own
  • git diff origin/main against the merge result is empty

Two things I checked specifically, since both live in regions production also touched:

  • globals.css keeps the sap-burst keyframe (main-only; the port deliberately excluded it)
  • lib/api.ts keeps main's copy, not the port's narrower insertion — subscribeToNewsletter survives either way

After this

main and production share ancestry again, so the next make promote gets past preflight. The other two promote blockers are unaffected by this PR and still stand: STAGING_SUPABASE_DB_URL is unset while 8 migrations are pending, and backend/.env.production doesn't exist.

🤖 Generated with Claude Code

Darkest-Teddyand others added 8 commits June 27, 2026 21:57
Promote staging → production: design-system, agents, calendar rewire, storage lockdown
No code change (empty commit, same tree as production HEAD). Purpose: make
Cloudflare Workers Builds re-run the prod `frontend` build so the corrected
NEXT_PUBLIC_API_URL / BACKEND_URL build variables get inlined into the client
bundle. The prior live worker came from a local `npm run cf:deploy` whose build
had no NEXT_PUBLIC_API_URL, so the Sign-in button saw it empty and showed
'Google sign-in is not configured'. A CI build with the build variables fixes it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-rebuild
chore(deploy): trigger prod frontend rebuild (bake NEXT_PUBLIC_API_URL into client)
Promote staging to production — 285 commits (DB reconciled first)
production still serves the v4 landing — the scroll-driven knowledge graph
from #513. main has carried v5 since #524, but production sits 68 commits
behind it, and promoting main wholesale would also ship the gamification
feature and apply 8 unrun migrations to the production database. This
takes the landing and nothing else.
Every file here is origin/main's version, with three deliberate departures:
- lib/api.ts gains only `subscribeToNewsletter`, which the beta CTA calls
and production lacks. Taking main's whole api.ts would have brought the
gamification client with it. POST /api/newsletter/subscribe already
exists on production's backend, so the CTA works as shipped.
- globals.css takes the 238-line .landing-dc/.landing-v5 block only. The
one other addition in main's copy — the sap-burst keyframe behind an
achievement badge in BadgeModal — belongs to a component this branch
does not have.
- The v4 marketing components it replaces are deleted (FeatureBand,
SurfaceBento, featureBands, graph/, surfaces/). Nothing outside
components/marketing/ imported them; marketing/ now matches main.
e2e follows the same rule: landing-graph.spec.ts drives the v4 graph
section this removes, so it goes; landing-drag-field.spec.ts and the
public-seo copy assertions come across. support/db.ts's additions stay
behind — those are gamification's.
Verified on this branch: tsc --noEmit clean, DEPLOY_ENV=production
next build clean, and the 44 landing unit tests pass. three@^0.184.0 is
already a production dependency; layout.tsx, sitemap.ts and robots.ts
needed no change.
No backend change, no migration.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
CI's `eslint . --max-warnings=-1` exits 2 on "There are suppressions left
that do not occur anymore" — 0 errors, but a stale entry is still a failure.
The three suppressed violations under src/app/(public)/page.tsx belonged to
the v4 landing (no-html-link-for-pages, two prefer-const, and a
set-state-in-effect); the v5 page this replaces has none of them.
Pruned with `eslint . --prune-suppressions`, the remedy the error names.
main's copy of this file does not list that page either, so this converges
on the same state rather than inventing one.
feat(landing): port the v5 marketing landing onto production
@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitUpdated (UTC)
✅ Deployment successful!
View logs
frontend0872986Aug 23 2026, 07:01 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pagesBot commented Aug 23, 2026

Copy link
Copy Markdown

Deploying with Cloudflare Workers Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

StatusNameLatest CommitPreview URLUpdated (UTC)
✅ Deployment successful!
View logs
frontend-staging0872986Commit Preview URL

Branch Preview URL
Aug 23 2026, 07:03 AM

@coderabbitai

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: b4382f36-1b95-40e4-a2f1-6400cbf18d69


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@supabase

supabaseBot commented Aug 23, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project ybgqdonkoqftwrmweuyv because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

…production" (#585)
This reverts commit 56d1ac2, reversing
changes made to 6ec3d0f.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Darkest-Teddy@AndresL230