ts.com Site Rebuild — Cursor Task Brief
Section titled “ts.com Site Rebuild — Cursor Task Brief”Created: 2026-05-20
Updated: 2026-05-21
Executor: Cursor (autonomous)
Repo: /home/ta/projects/monorepo
Site path: sites/ts/
Local preview: web-deploy ts-site local → http://localhost:4326/
Background & Context
Section titled “Background & Context”The Business
Section titled “The Business”Talbot Stevens is a Canadian financial author, speaker, and consultant specializing in responsible leveraged investing. He is a solo operator who relies heavily on AI for development. The primary business website is www.TalbotStevens.com (ts.com).
The Problem
Section titled “The Problem”The existing ts.com is decades old, not responsive, and runs on Windows/IIS hosting (Canadian Web Hosting). It needs to be rebuilt in the monorepo and migrated to Cloudflare Pages.
This task: fully rebuild all page content in sites/ts/ using the master content files (see below). A skeleton with correct page structure already exists — the pages exist but have placeholder/minimal content.
The Monorepo
Section titled “The Monorepo”The monorepo (/home/ta/projects/monorepo) is the Astro-based platform for all business websites. It is not fully stable — there are known incomplete issues from an in-progress upgrade. Proceed carefully:
- Read
README.mdat/home/ta/projects/monorepo/README.mdfor monorepo overview - Do NOT modify shared packages (
packages/components/,packages/design-tokens/) - Do NOT modify other sites (
sites/template/,sites/sdc/,sites/mbr/) - Work ONLY in
sites/ts/
Master Content (Source of Truth)
Section titled “Master Content (Source of Truth)”All existing ts.com content lives locally at:
- WSL path:
/mnt/d/FSS/Websites/TS.com/Content/ - Windows path:
D:\FSS\Websites\TS.com\Content\
Read .shtm and .htm files as HTML — strip legacy includes/scripts, extract the actual content. Use this as the authoritative source for all copy, not the live site.
Key content files:
| Page | Content file |
|---|---|
| Home | Content/home.shtm |
| About | Content/AboutTalbot/AboutTalbot.shtm |
| Products index | Content/Products/Products.shtm |
| Book: Smart Debt Coach | Content/Products/BooksBooklets/Book-SDC.shtm |
| Book: Financial Freedom | Content/Products/BooksBooklets/Book.shtm |
| Booklet: Dispelling Myths | Content/Products/BooksBooklets/Booklet.shtm |
| b-Books | Content/Products/BooksBooklets/bBooks.shtm |
| Software: Leverage Professional | Content/Products/Software/LevPro.shtm |
| Software: ATI Pro | Content/Products/Software/ATIPro.shtm |
| Software: RRSP Optimizer | Content/Products/Software/RRSPOpt.shtm |
| Speaking | Content/Speaking/Speaking.shtm |
| Consulting | Content/Consulting.shtm |
| Resources index | Content/Resources/FreeResources.shtm |
| Resources: General | Content/Resources/General/General.shtm (if exists) |
| Resources: Leverage | Content/Resources/Leverage/Leverage.shtm |
| Resources: Retirement Income | Content/Resources/RetirementIncome/ |
| Resources: RRSPs | Content/Resources/RRSPs/ |
| Downloads | Content/Downloads.htm |
| Contact | Content/ContactUs.shtm |
| Disclaimer | Content/Disclaimer.shtm |
| Privacy | Content/PrivacyStatement.shtm |
Images (copy to sites/ts/public/images/):
| Image | Source path (relative to Content/) |
|---|---|
| Author headshot | images/TalbotStevens-Head,LowRes.jpg (use HeadPhoto.jpg if better) |
| Smart Debt Coach cover | images/BookSDC-Cover.jpg |
| Financial Freedom cover | images/BookCOVER.jpg |
| Pamphlet cover | images/Pamphlet1Cover.jpg |
| Books stack | images/BooksStack.jpg |
Check Content/images/ and Content/Products/BooksBooklets/ for additional cover images (e.g. LEVBKL Cover.jpg for booklet cover).
Monorepo Architecture
Section titled “Monorepo Architecture”/home/ta/projects/monorepo/ sites/ts/ ← work here only src/ layouts/ BaseLayout.astro # HTML shell: header, nav, footer pages/ index.astro # Home about.astro # About consulting.astro # Consulting speaking.astro # Speaking products.astro # Products index → link to sub-pages products/ # CREATE: individual product pages resources.astro # Resources downloads.astro # Downloads gross-up.astro # Gross-Up Calculator (DO NOT TOUCH) contact.astro # Contact disclaimer.astro # Disclaimer privacy.astro # Privacy styles/ global.css themes/ base.css light.css dark.css # REMOVE (see Task 1) public/ images/ # CREATE: copy images here astro.config.mjs packages/ components/src/ui/ # DO NOT MODIFY design-tokens/ # DO NOT MODIFYPath aliases (configured in astro.config.mjs):
@components/ui/*→packages/components/src/ui/*@brand→src/brand/
Dev commands (run from sites/ts/):
pnpm dev # dev server (search won't work here — use pnpm build + pnpm preview)pnpm build # production build + pagefind indexpnpm preview # serve built output (search works here)pnpm test # astro check (TypeScript validation)- create Git commit before as a restore point, and after completing sections of the development
Task 1: Remove Dark Mode
Section titled “Task 1: Remove Dark Mode”Dark mode is not needed. Remove all traces.
1a. sites/ts/src/layouts/BaseLayout.astro
Section titled “1a. sites/ts/src/layouts/BaseLayout.astro”Remove the inline theme-detection <script is:inline> block from <head>.
Remove the theme-toggle <li> from the nav list (the <button class="theme-toggle"> element).
Remove the <script> block at the bottom of <body> that handles the toggle click.
Remove .theme-toggle CSS from the <style> block.
1b. sites/ts/src/styles/global.css
Section titled “1b. sites/ts/src/styles/global.css”Remove any @import of ./themes/dark.css.
1c. Delete sites/ts/src/styles/themes/dark.css
Section titled “1c. Delete sites/ts/src/styles/themes/dark.css”1d. sites/ts/src/styles/themes/light.css
Section titled “1d. sites/ts/src/styles/themes/light.css”If it uses [data-theme='light'] selector, change to :root so styles apply without any attribute.
Task 2: Individual Product Pages
Section titled “Task 2: Individual Product Pages”The existing products.astro lists all products in one flat list. Each product needs its own page.
Product pages to create (sites/ts/src/pages/products/):
Section titled “Product pages to create (sites/ts/src/pages/products/):”| URL | File | Source content |
|---|---|---|
/products/smart-debt-coach/ | smart-debt-coach.astro | Content/Products/BooksBooklets/Book-SDC.shtm |
/products/financial-freedom/ | financial-freedom.astro | Content/Products/BooksBooklets/Book.shtm |
/products/dispelling-myths/ | dispelling-myths.astro | Content/Products/BooksBooklets/Booklet.shtm |
/products/b-books/ | b-books.astro | Content/Products/BooksBooklets/bBooks.shtm |
/products/leverage-professional/ | leverage-professional.astro | Content/Products/Software/LevPro.shtm |
/products/ati-pro/ | ati-pro.astro | Content/Products/Software/ATIPro.shtm |
/products/rrsp-optimizer/ | rrsp-optimizer.astro | Content/Products/Software/RRSPOpt.shtm |
/products/seminar-package/ | seminar-package.astro | Content/Products/SeminarPackages/ (check for .shtm file) |
/products/conservative-leverage-intro/ | conservative-leverage-intro.astro | Content/Products/Pamphlets/ (check for .shtm file) |
Each product page structure:
Section titled “Each product page structure:”---import BaseLayout from '../../layouts/BaseLayout.astro';---
<BaseLayout title="[Product Name] — Talbot Stevens"> <div class="container page-content"> <nav class="breadcrumb" aria-label="Breadcrumb"> <a href="/products">← Products</a> </nav> <h1>[Product Name]</h1>
<!-- cover image if available --> <!-- full description from source .shtm file --> <!-- testimonials (collapsible or just listed) --> <!-- pricing if stated --> <!-- guarantees (e.g. "$1,000 benefit guaranteed") -->
<div class="product-cta"> <!-- stripePaymentLink placeholder — empty string for now --> <a href="/contact" class="btn">Contact to Order</a> </div> </div></BaseLayout>Include all testimonials, guarantee copy, and descriptions from the source files.
Update products.astro (index):
Section titled “Update products.astro (index):”Change from flat list to a linked card grid. Each card: product name, 1-2 sentence excerpt, “Learn more” link to individual page. Keep descriptions brief on index — full content lives on sub-pages.
Task 3: Homepage — Full Content Rebuild
Section titled “Task 3: Homepage — Full Content Rebuild”Read Content/home.shtm and replicate all content sections:
- Talbot’s headshot and intro paragraph
- The Smart Debt Coach featured section
- RRSP Pasta Challenge section (this is a key standalone feature — the “RRSP Pasta Question” is a clever hook Talbot uses)
- Links to key resources and products
- Any featured testimonials
Note: the homepage references the Smart Debt Visualizer software (in development). Keep this mention — it shows Talbot’s ongoing work.
Image to use: copy Content/images/TalbotStevens-Head,LowRes.jpg to sites/ts/public/images/ and reference as /images/TalbotStevens-Head,LowRes.jpg (or rename to talbot-headshot.jpg).
Task 4: Resources — Real Article Listings
Section titled “Task 4: Resources — Real Article Listings”Read source files in Content/Resources/:
FreeResources.shtm— main resources index copyLeverage/Leverage.shtm— leverage resources overviewLeverage/Articles/— list article filenames (these are PDFs the site links to)Leverage/StratSheets/— strategy sheet filenamesLeverage/ConceptSheets/— concept sheet filenamesLeverage/Releases/— news release filenamesGeneral/— general articlesRetirementIncome/— retirement income resourcesRRSPs/— RRSP articles
For articles that exist as PDFs in the content directory, link to them directly. The PDFs under Content/Resources/ can be copied to sites/ts/public/resources/ and served as static files (e.g. /resources/leverage/2001AU-Leverageadouble-edgedsword.pdf).
Implementation approach for Resources page:
Use tabbed or sectioned layout with one section per category:
- General — list articles with brief descriptions
- Leverage — list top tips, articles, strategy sheets, concept sheets, news releases
- Maximize Retirement Income — list resources
- RRSPs — list articles including RRSP Pasta Challenge (link to its own page or section)
Do not just show category descriptions — show actual resource titles so users can find what they need.
Task 5: Images
Section titled “Task 5: Images”Copy these images to sites/ts/public/images/:
# From Content/images/ — copy these:TalbotStevens-Head,LowRes.jpg → rename to talbot-headshot.jpgBookSDC-Cover.jpgBookCOVER.jpg → rename to financial-freedom-cover.jpgPamphlet1Cover.jpgBooksStack.jpgHeadPhoto.jpg # alternate headshot if better quality
# From Content/Products/BooksBooklets/:LEVBKL Cover.jpg → rename to dispelling-myths-cover.jpgAlso check Content/img/ for any additional relevant images.
Reference all images in pages as /images/[filename].
Task 6: Footer — Complete Navigation Links
Section titled “Task 6: Footer — Complete Navigation Links”The current footer only shows Disclaimer and Privacy. Update BaseLayout.astro footer to include full navigation:
About | Consulting | Speaking | Products | Resources | Downloads | ContactDisclaimer | PrivacyStructure:
<footer class="site-footer"> <div class="container"> <nav class="footer-nav" aria-label="Footer navigation"> <a href="/about">About</a> <a href="/consulting">Consulting</a> <a href="/speaking">Speaking</a> <a href="/products">Products</a> <a href="/resources">Resources</a> <a href="/downloads">Downloads</a> <a href="/contact">Contact</a> </nav> <div class="footer-legal"> <a href="/disclaimer">Disclaimer</a> <a href="/privacy">Privacy</a> </div> <p>© {new Date().getFullYear()} Talbot Stevens Financial Inc. All rights reserved.</p> </div></footer>Task 7: Contact Page
Section titled “Task 7: Contact Page”Read Content/ContactUs.shtm for the actual contact copy and any email addresses/phone shown.
For the form: use a mailto: action with subject prefill — no backend is needed (Cloudflare Pages is static).
<form action="mailto:info@talbotstevens.com" method="post" enctype="text/plain">Or better: replace the form with a direct email link + phone number if shown in the source file. A simple contact page with email address is more reliable than a form on a static site.
Task 8: Search
Section titled “Task 8: Search”Pagefind runs as a postbuild step only. It will NOT work in pnpm dev. This is expected behavior.
To test search:
cd /home/ta/projects/monorepo/sites/tspnpm buildpnpm preview # serve at localhost:4321 — search works hereThe search integration (<Search /> in BaseLayout.astro) uses @components/ui/Search.astro. This is already wired up. If search still fails after a build, check:
dist/pagefind/directory exists after buildastro.config.mjshasssr: { external: ['@pagefind/default-ui'] }
Do not remove or bypass search — fix the underlying cause if broken.
Task 9: About Page
Section titled “Task 9: About Page”Read Content/AboutTalbot/AboutTalbot.shtm and Content/AboutTalbot/Biography.shtm for full bio content.
Include:
- Talbot’s headshot (
/images/talbot-headshot.jpg) - Full professional bio
- Mission statement
- What sets him apart (unbiased, not a financial planner)
- Photo gallery section (check
Content/AboutTalbot/Photos.shtm)
Ecommerce Placeholder (do NOT implement in this task)
Section titled “Ecommerce Placeholder (do NOT implement in this task)”Product pages should have a stripePaymentLink = '' variable at the top (empty string). The CTA button logic:
{stripePaymentLink ? <a href={stripePaymentLink} class="btn" target="_blank">Buy Now</a> : <a href="/contact" class="btn">Contact to Order</a>}Leave stripePaymentLink = '' on all pages. The ecommerce task will update these later.
Acceptance Criteria
Section titled “Acceptance Criteria”- Dark mode toggle removed; light theme only
- All product pages created under
/products/[slug]/with full content from source files - Products index links to all individual product pages
- Homepage has full content from
home.shtm(headshot, SDC feature, RRSP Pasta) - Resources page lists actual article titles per category (not just category descriptions)
- PDFs from
Content/Resources/copied topublic/resources/and linked correctly - Images copied to
public/images/and used in pages - Footer has complete navigation links
- Contact page has actual contact info from source file
- About page has full bio with headshot
-
pnpm buildsucceeds (zero errors) -
pnpm test(astro check) passes (zero TypeScript errors) -
pnpm previewshows working site with functional search
Do NOT Touch
Section titled “Do NOT Touch”sites/ts/src/pages/gross-up.astro— leave as-ispackages/components/— do not modifypackages/design-tokens/— do not modifysites/template/,sites/sdc/,sites/mbr/— do not touch other sitessrc/brand/ts/— do not modify brand assets- Favicon files in
sites/ts/public/— do not modify