feat: Add CHORUS teaser website with mobile-responsive design

- Created complete Next.js 15 teaser website with CHORUS brand styling
- Implemented mobile-responsive 3D logo (128px mobile, 512px desktop)
- Added proper Exo font loading via Next.js Google Fonts for iOS/Chrome compatibility
- Built comprehensive early access form with GDPR compliance and rate limiting
- Integrated PostgreSQL database with complete schema for lead capture
- Added scroll indicators that auto-hide when scrolling begins
- Optimized mobile modal forms with proper scrolling and submit button access
- Deployed via Docker Swarm with Traefik SSL termination at chorus.services
- Includes database migrations, consent tracking, and email notifications

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
tony
2025-08-26 13:57:30 +10:00
parent 630d1c26ad
commit c8fb816775
236 changed files with 17525 additions and 0 deletions

View File

@@ -0,0 +1 @@
(()=>{"use strict";var a={},b={};function c(d){var e=b[d];if(void 0!==e)return e.exports;var f=b[d]={exports:{}},g=!0;try{a[d](f,f.exports,c),g=!1}finally{g&&delete b[d]}return f.exports}c.m=a,c.amdO={},(()=>{var a="function"==typeof Symbol?Symbol("webpack queues"):"__webpack_queues__",b="function"==typeof Symbol?Symbol("webpack exports"):"__webpack_exports__",d="function"==typeof Symbol?Symbol("webpack error"):"__webpack_error__",e=a=>{a&&a.d<1&&(a.d=1,a.forEach(a=>a.r--),a.forEach(a=>a.r--?a.r++:a()))};c.a=(c,f,g)=>{g&&((h=[]).d=-1);var h,i,j,k,l=new Set,m=c.exports,n=new Promise((a,b)=>{k=b,j=a});n[b]=m,n[a]=a=>(h&&a(h),l.forEach(a),n.catch(a=>{})),c.exports=n,f(c=>{i=c.map(c=>{if(null!==c&&"object"==typeof c){if(c[a])return c;if(c.then){var f=[];f.d=0,c.then(a=>{g[b]=a,e(f)},a=>{g[d]=a,e(f)});var g={};return g[a]=a=>a(f),g}}var h={};return h[a]=a=>{},h[b]=c,h});var f,g=()=>i.map(a=>{if(a[d])throw a[d];return a[b]}),j=new Promise(b=>{(f=()=>b(g)).r=0;var c=a=>a!==h&&!l.has(a)&&(l.add(a),a&&!a.d&&(f.r++,a.push(f)));i.map(b=>b[a](c))});return f.r?j:g()},a=>(a?k(n[d]=a):j(m),e(h))),h&&h.d<0&&(h.d=0)}})(),c.n=a=>{var b=a&&a.__esModule?()=>a.default:()=>a;return c.d(b,{a:b}),b},(()=>{var a,b=Object.getPrototypeOf?a=>Object.getPrototypeOf(a):a=>a.__proto__;c.t=function(d,e){if(1&e&&(d=this(d)),8&e||"object"==typeof d&&d&&(4&e&&d.__esModule||16&e&&"function"==typeof d.then))return d;var f=Object.create(null);c.r(f);var g={};a=a||[null,b({}),b([]),b(b)];for(var h=2&e&&d;"object"==typeof h&&!~a.indexOf(h);h=b(h))Object.getOwnPropertyNames(h).forEach(a=>g[a]=()=>d[a]);return g.default=()=>d,c.d(f,g),f}})(),c.d=(a,b)=>{for(var d in b)c.o(b,d)&&!c.o(a,d)&&Object.defineProperty(a,d,{enumerable:!0,get:b[d]})},c.f={},c.e=a=>Promise.all(Object.keys(c.f).reduce((b,d)=>(c.f[d](a,b),b),[])),c.u=a=>""+a+".js",c.o=(a,b)=>Object.prototype.hasOwnProperty.call(a,b),c.r=a=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},c.X=(a,b,d)=>{var e=b;d||(b=a,d=()=>c(c.s=e)),b.map(c.e,c);var f=d();return void 0===f?a:f},(()=>{var a={311:1},b=b=>{var d=b.modules,e=b.ids,f=b.runtime;for(var g in d)c.o(d,g)&&(c.m[g]=d[g]);f&&f(c);for(var h=0;h<e.length;h++)a[e[h]]=1};c.f.require=(d,e)=>{a[d]||(311!=d?b(require("./chunks/"+c.u(d))):a[d]=1)},module.exports=c,c.C=b})()})();