From a32a710c800ec66dab3e5ef2c3e49a1c72586d7e Mon Sep 17 00:00:00 2001 From: martbost Date: Tue, 11 Aug 2026 10:18:30 -0500 Subject: [PATCH] Make video embed responsive with size fallback; stop caching CSS/JS CSS and JS are now served no-cache like HTML so style/script updates apply on normal refresh instead of waiting out a 1-hour browser cache. Co-Authored-By: Claude Fable 5 --- public/index.html | 2 +- public/styles.css | 2 +- server.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/public/index.html b/public/index.html index 2bd356b..9e1e214 100644 --- a/public/index.html +++ b/public/index.html @@ -7,7 +7,7 @@
Premium • Polygon • Team Duplication

Get Your 2.
Help Your 2 Get Their 2.

A team-first strategy built around qualification, depth, and duplication.

Independent team training resource • Participation involves risk • No income is guaranteed
RM Circle Premium Team Build Roadmap — core strategy, step-by-step guide, premium levels, and duplication formula
The RM Circle is a team build project of the Crypto Team Build Network. This roadmap is the plan every member follows — tap to view full size.
-
Watch first

See how simple this is.

A quick walkthrough of the team build in action. Watch this before you dive into the strategy below.

+
Watch first

See how simple this is.

A quick walkthrough of the team build in action. Watch this before you dive into the strategy below.

The strategy

Simple enough to duplicate.

The goal is not endless personal recruiting. Each position gets two directs, retires that referral link, then helps the next two positions repeat the process.

2

Get exactly two

Use your position's link until two direct positions are placed beneath you and your position is qualified.

↘

Move the effort down

Retire the qualified link. Help each of your two directs use their links until they each have two.

↑

Upgrade responsibly

Use earned POL to advance when practical. Active builders may also choose to self-fund, but only within their own risk tolerance.

Moving-link workflow

Links retire. Recruiting keeps moving.

Step 1Use link

Share the current position's referral link.

Step 2Get 2

Place exactly two direct positions.

Step 3Retire link

Stop creating extra shallow legs.

Step 4Help your 2

Shift the team effort to their links.

Step 5Repeat

Keep the qualification wave moving down.

Depth over width

2 → 4 → 8 → 16 → 32

The first major team milestone is 30 correctly placed positions across the first four generations: 2 + 4 + 8 + 16.

2
4
8
16
Team principle: once your two are in place, do not keep adding more directs to the same qualified link. Help the next positions become qualified so the matrix develops depth instead of extra shallow legs.
diff --git a/public/styles.css b/public/styles.css index 3798a03..383ceb5 100644 --- a/public/styles.css +++ b/public/styles.css @@ -19,4 +19,4 @@ a{color:inherit}.wrap{width:min(1160px,calc(100% - 32px));margin:auto}.nav{heigh .funnel{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:14px 0} .video-card{max-width:880px;margin:0 auto;padding:10px;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)} -.video-frame{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:12px} +.video-frame{display:block;width:100%;height:auto;aspect-ratio:16/9;border:0;border-radius:12px} diff --git a/server.js b/server.js index 5a7f6c0..19ce3d0 100644 --- a/server.js +++ b/server.js @@ -74,7 +74,7 @@ function getSession(req){const token=parseCookies(req)['ctb.sid'];if(!token)retu function requireAdmin(req,res){if(!getSession(req)){json(res,401,{error:'Unauthorized'});return false}return true} async function bodyJson(req){return await new Promise((resolve,reject)=>{let data='';req.on('data',c=>{data+=c;if(data.length>100000){reject(new Error('Payload too large'));req.destroy()}});req.on('end',()=>{if(!data)return resolve({});try{resolve(JSON.parse(data))}catch(e){reject(new Error('Invalid JSON'))}});req.on('error',reject)})} function contentType(file){const ext=path.extname(file);return ({'.html':'text/html; charset=utf-8','.css':'text/css; charset=utf-8','.js':'application/javascript; charset=utf-8','.json':'application/json; charset=utf-8','.png':'image/png','.jpg':'image/jpeg','.jpeg':'image/jpeg','.webp':'image/webp','.svg':'image/svg+xml','.ico':'image/x-icon'}[ext]||'application/octet-stream')} -function staticFile(res,file,status=200){if(!fs.existsSync(file)||!fs.statSync(file).isFile())return false;send(res,status,fs.readFileSync(file),{'Content-Type':contentType(file),'Cache-Control':path.extname(file)==='.html'?'no-cache':'public, max-age=3600'});return true} +function staticFile(res,file,status=200){if(!fs.existsSync(file)||!fs.statSync(file).isFile())return false;send(res,status,fs.readFileSync(file),{'Content-Type':contentType(file),'Cache-Control':['.html','.css','.js'].includes(path.extname(file))?'no-cache':'public, max-age=3600'});return true} async function handleApi(req,res,pathname){ if(req.method==='GET'&&pathname==='/health') return json(res,200,{ok:true});