The romance database that sounds like your group chat.
by Aleia & Christine · Project Plan 2026–2027
Vision & Voice
Vision (North Star)
Double Booked Club is where BIPOC romance readers come to find their next book — not from an algorithm, not from a ranked list, but from two friends who read it and have feelings about it. The site is a living, searchable database of romance novels centering our communities, anchored by a review voice that sounds like the group chat, not a literary journal. By January 2027, a reader should be able to land on the site, tell it what they're in the mood for, and find exactly the kind of love story they're looking for.
The Voice
"The Double Booked Club voice is the competitive advantage. Most romance review sites sound like Goodreads. Double Booked Club sounds like two people who cannot stop talking about a book they just finished."
Reviews are conversational, opinionated, and specific. "We screamed" and "the slow burn absolutely destroyed us" and "okay but the cover though." Both perspectives present — not blended into neutral consensus but genuinely in dialogue. A reader should finish a DB review feeling like they got a recommendation from someone who actually cares whether they enjoy the book.
"The rule everything else answers to — If a technical decision would make the reviews feel more formal or more generic, it's the wrong decision. The voice is not a style guide — it's the architecture."
Brand Identity
Tagline
The romance database that sounds like your group chat.
Hosts
Aleia & Christine
Aleia's Library × Tropes and Kisses
Founding cohort
The Prologues
The founding beta readers. Before the story starts.
Annual feature
The Double Down
DB's annual year-in-review feature. First Monday of January, every year.
Typography
Display — DM Serif Display
The romance database that sounds like your group chat.
Body — Nunito Sans
Reviews are conversational, opinionated, and specific. Both perspectives present — not blended into neutral consensus but genuinely in dialogue. A reader should finish a DB review feeling like they got a recommendation from someone who actually cares.
Labels & Metadata — Monospace
enemies to loversdiaspora romanceslow burnDB ReviewAleia's TakeChristine's Take
Color Palette
Primary
Blue
#497dcb
Blue Dark
#2a4a8a
Blue Light
#e8f0fa
Warm accents
Sand
#d4a06e
Blush
#de9a7a
Blush Light
#faf0eb
Olive
#8a6c45
Tan
#c3a47d
New additions
Goldenrod
#c9952a
Double Down · Prologues
Gold Light
#fdf5e4
Card backgrounds
Ink Black
#1a100a
Header, dark surfaces
Dark
#2c1f10
Cream
#ede7e7
The Resource
A searchable database
Filterable by genre, trope, microtrope, age range, and review status.
A discovery tool
Tropes-first navigation so readers find books by what they're in the mood for.
A review destination
DB joint reviews and solo takes, clearly distinguished, all in your voice.
A BIPOC-centered space
Identity and representation are first-class — not subcategories.
Timeline
May / June 2026
Build & Beta
A real, working site in front of your existing community. It doesn't need to be complete — it needs to be useful and it needs to sound like you.
Going live:
Full 2026 book database in HubDB, filterable by genre, tropes, and review status
Short blurbs for every entry written in Double Booked voice
DB review links clearly labeled; solo reviews (Aleia's Take / Christine's Take) visually distinct
No ratings anywhere on the site
Complete brand identity — DM Serif Display, Nunito Sans, the full palette
HubSpot Forms for beta application — feeds CRM directly, no manual import
Subscribe / follow links to both Substacks
Partnership inquiry form live in HubSpot — open for business from day one
HubSpot Analytics active and tracking from first visit
Not yet:
Backfilled content beyond 2026 · Full review text on-site · Ads or monetization · Individual book detail pages
Decisions to lock:
Finalize and write down the trope taxonomy — this becomes the HubDB column values and the Claude Project system prompt
Set up the HubDB table with correct column structure before Claude Code builds the frontend
Set up the shared Claude Project with HubDB schema, trope taxonomy, and voice guidance loaded in
Connect Claude Code to HubSpot via API key — one-time setup, after that it's just conversation
Set up The Prologues contact list in HubSpot CRM and build the beta application form
Write the About Double Booked Club paragraph — together, in your voice
July 2026
Best of 2026 So Far
Your first real content moment. Something linkable, editorial, and demonstrative of what DB reviews feel like at their best.
Going live:
A Best Of feature that is not a ranked list — you talking about the books that wrecked you
Each pick gets a short DB-voice paragraph: specific, warm, opinionated
Individual book/review pages with permanent URLs for social linking
SEO basics: page titles, meta descriptions, Open Graph images
Links preview beautifully when shared on Instagram or in group chats
Not yet:
Full ad implementation · On-site review text (still linking to Substack)
Decisions to lock:
Coordinate social push across both platforms
Send newsletter driving to the feature
August 2026
Grand Opening
The full public launch. Everything that was beta is now finished. The site is ready for strangers who've never heard of either of you.
Going live:
Enough content that a new visitor browses for 15+ minutes
Tropes-first discovery — start from 'forced proximity + slow burn' and get a curated result
Currently Reading indicator on book cards so the site always feels alive
Media / partnerships page with a clear 'work with us' email
Bookshop.org affiliate links on every book entry from launch week
Social sharing working correctly everywhere — Instagram, iMessage, Twitter/X
Robust filtering: genre, trope, microtrope, age range, review status
Decisions to lock:
Press kit ready for bookstagrammers
Launch-week content plan
Ad strategy decided
January 4, 2027
The Double Down Annual
The date is intentional. January 4 is the first Monday of 2027 — DB's annual marker. The Re-Do List anniversary on January 27 is the founding story that gets told inside the feature itself. Making the first Monday of January the drop date turns this into a repeatable institution.
Going live:
Full The Double Down editorial feature — not just the best books but the year in BIPOC romance as you lived it
Debut authors who arrived fully formed
The trope that dominated the year
The book you didn't expect to love
The cover that stopped you mid-scroll
Stats: how many books, how many debuts, trope breakdown
Year-in-review page template you can reuse every January
Email campaign to your full list driving people back to the feature
Data
If adding a book is annoying, you won't do it consistently. The goal is a system where adding a new book takes less than two minutes and neither of you needs to think about formatting. The stack is HubSpot Content Hub Enterprise for hosting and the database, Claude Code for building and maintaining the site, and the shared Claude Project for day-to-day data entry — all three layers running together.
The stack
Hosting & frontend
HubSpot Content Hub Enterprise
Hosts the site, serves pages, manages the book database via HubDB, handles forms, CRM, and analytics. Everything in one platform — no separate hosting, no separate database tool.
Build & deploy
Claude Code
Builds and maintains the frontend — HubL templates, CSS, JS. Pushes book entries to HubDB via the HubSpot API. Handles deployments. You never open a code editor.
Day-to-day entry
Shared Claude Project
The interface for adding books. Knows your data format, trope taxonomy, and DB voice. Both of you can use it from your phone. Hands off to Claude Code for the actual push to HubDB.
Newsletter
Substack stays
Substack remains your editorial newsletter platform. HubSpot CRM syncs contact data but does not replace the reader relationship you have built there. Reviews link out to Substack until they live on-site.
Layer 1 — The Shared Claude Project
Day-to-day
Both of you are added as members to a single Claude Project. The system prompt knows your HubDB column structure, trope taxonomy, genre categories, review status options, and the Double Booked voice — so it can help draft blurbs and format entries in one step.
You type:"Add The Bridge Back to You by Riss Neilson, contemporary, March 2026, planned"
Claude returns:A fully formatted entry matching your HubDB column structure — title, author, pub date, genre, tropes, review status, cover URL from Google Books. Tell Claude Code to push it, or copy it yourself. Done in under two minutes.
No ISBNs to huntNo formatting to think aboutWorks from your phoneAleia or Christine can both do it
Layer 2 — HubDB (the source of truth)
Source of truth
HubDB is HubSpot's built-in relational database — it lives inside your Content Hub account and is queryable from any HubSpot template via the HubDB API. Your book catalog lives here as a table with one row per book. Claude Code can read and write to it directly using your HubSpot API key. When a row is added or updated, the site reflects it immediately — no rebuild step, no deployment pipeline.
You type:"Add these three books to HubDB and make sure the trope tags are right"
Claude Code does:Calls the HubSpot API, creates the rows, verifies the trope taxonomy matches your master list, confirms. The site is live with the new entries. You never log into HubDB directly.
No rebuild on updateAPI-native — Claude Code speaks it nativelyOne-time table setupQueryable from any HubSpot page template
HubSpot CRM — people, not books
Relationships
HubDB handles books. HubSpot CRM handles people. Three contact lists to set up from day one:
The Prologues
Beta readers. Intake via HubSpot Form. Tagged with feedback status, whether they have been thanked, and their founding reader credit date.
No star ratings. No spice levels. Ratings only appear if there is a Double Booked review, and even then the review link is the signal — not a number.
Cover image lookup — automatic protocol
This lives in the shared Claude Project system prompt. Every book entry automatically attempts cover lookup before returning — you only see NEEDS_COVER for very obscure or self-published titles with no ISBN.
Extract docs[0].isbn[0] from the search result, then construct the cover URL. Free, stable, no API key required.
Step 3 — Flag for manual review
If neither source finds a cover, set cover_url to NEEDS_COVER. Never leave it empty — the placeholder lets you filter HubDB for missing covers and batch-fix them periodically.
Claude Project system prompt — paste this in
COVER IMAGE LOOKUP — AUTOMATIC PROTOCOL
When adding any book entry, always attempt to find a cover image automatically before asking for one or leaving the field empty. Follow this lookup chain in order:
STEP 1 — Google Books API
Search: https://www.googleapis.com/books/v1/volumes?q=intitle:[TITLE]+inauthor:[AUTHOR]
Extract: items[0].volumeInfo.imageLinks.extraLarge — if not present, try large, then thumbnail.
Use the https:// version of the URL — replace any http:// prefix.
Strip any &zoom= or &edge=curl parameters from the URL.
STEP 2 — Open Library fallback
If Google Books returns no image, search:
https://openlibrary.org/search.json?title=[TITLE]&author=[AUTHOR]
Extract docs[0].isbn[0], then construct:
https://covers.openlibrary.org/b/isbn/[ISBN]-L.jpg
STEP 3 — Flag for manual review
If neither source returns a cover, set cover_url to NEEDS_COVER.
Never leave cover_url empty.
FORMATTING RULES
- Always use https:// — never http://
- Always use the largest image size available
- Never upload to HubSpot Files — store the external URL only
- Strip &zoom= and &edge=curl parameters from Google Books URLs
Note
To find all entries missing a cover: in HubSpot, open the db-books HubDB table, filter cover_url contains NEEDS_COVER. This gives you a clean list to work through in a single Claude Project session.
Practical example — end to end
Aleia finishes Ember by Naima Simone. She opens the shared Claude Project on her phone and types: "Ember by Naima Simone, dark romance, adult, July 2026 — Aleia finished it, no DB review yet." Claude returns a formatted entry matching the HubDB column structure, including a cover URL from Google Books and trope tags from the taxonomy. She tells Claude Code to push it. Claude Code calls the HubSpot API, creates the row in HubDB, and confirms. The entry is live on the site in under two minutes. No code editor. No login to HubSpot. No formatting decisions.
Backfilling — the intentional approach
You are not trying to catalog everything you have ever read. Backfill strategy is trope-first — identify the tropes readers search for most in the HubSpot analytics, then pull in the strongest titles from previous years that represent those categories well. Ongoing and unhurried. A great older title added in November 2026 is just as valuable as one added at launch.
The metric that matters most at launch
Referral source on the day The Double Down drops. If Substack drives more traffic than Instagram, double down on the email. If Instagram drives more, build the share-to-Stories flow into every future feature. That data point shapes every subsequent launch decision.
Tropes & Microtropes
7 categories of tropes, each broken into microtropes for precise tagging. The Identity & Representation category is where Double Booked Club is genuinely distinct — those tropes are first-class entries here, not subcategories buried under something else.
A note on consistency
The trope taxonomy only works if both of you use the same words. Agree on canonical spellings and phrasing before you start tagging — "enemies to lovers" not "e2l" — and paste the final version into the Claude Project system prompt so every new entry gets tagged correctly from day one.
Ongoing
Ongoing rhythms
The database stays current
Every book you're actively reading, planning to read, or have finished goes in the system. The Claude Project makes this a two-minute task. If it becomes a chore, the site goes stale — and a stale book database is the one thing that will undermine the whole resource.
The voice stays consistent
As the site grows, someone needs to be the voice guardian. DB reviews should always sound like the two of you texted each other about a book at 11pm and then turned it into something the internet could read.
The review URL field gets updated
Every time a review goes live anywhere — Substack, on-site, a guest post — the database gets updated that same day. This habit makes the eventual full migration to on-site reviews painless.
The trope taxonomy grows deliberately
As you backfill older reads, you'll find gaps. Update the master taxonomy document and the Claude Project system prompt together every time, so tagging stays consistent across everything ever added.
Monetization
Bookshop.org affiliate links
On every book entry from day one. Small commission per purchase, ethically aligned, signals to future partners that you're treating this as a business.
Ad networks (Mediavine, Raptive)
Traffic thresholds to hit first — the grand opening push, Best Of features, and consistent social driving are all working toward these numbers.
Brand partnerships
The media page at launch is your signal to the industry. BIPOC voices, a specific and underserved audience, and a genuine editorial POV is a compelling pitch to romance publishers and aligned brands.
Sponsored content
Build the site for speed and clean ad placement zones from the start so there's no retrofit work later.
Next Steps
These aren't blockers — the site can be built without them. But getting them right first makes every session with Claude Code faster, cleaner, and more likely to produce something you both love. Steps 1–3 are the ones only you can do. Steps 4–8 are where Claude Code takes over.
1
Write the trope and microtrope taxonomy together — agree on canonical vocabulary, put it in a shared doc. This becomes both the HubDB column values and the Claude Project system prompt. Do this before anything else.
only you can do this one
2
Write the About Double Booked Club paragraph you both love — one paragraph, in DB voice, that you would be happy to read aloud. This goes in the site footer and the HubSpot About page.
only you can do this one
3
Audit the 2026 reading list: every entry needs title, author, pub date, genre, age range, rough trope tags, review status, and a review URL where one exists. This becomes the first HubDB import.
only you can do this one
4
Set up HubSpot Content Hub — confirm your Enterprise account is active, set up the subdomain, and give Claude Code API access. This is the one step that requires a human to log in.
requires HubSpot login — once
5
Set up the HubDB table with Claude Code — column structure, data types, trope tag options. One session. After that Claude Code can read and write to it in conversation.
6
Set up the shared Claude Project — both of you added as members, system prompt loaded with HubDB column structure, trope taxonomy, voice guidance, and the brand identity tokens.
7
Set up HubSpot CRM lists — The Prologues, Partners, Press. Build the beta application form in HubSpot Forms so it feeds the CRM directly.
8
Then: open Claude Code, hand it this plan, your reading list, and your HubSpot API key — and say build it.
Open a Claude Code session.
Hand it this plan, your reading list, and your HubSpot API key.
"build it."
Marketing
Your audience is real, warm, and already bought in — they follow both of you because they trust your taste. The marketing strategy does not try to manufacture hype. It turns genuine excitement into structured moments that give your existing community permission to spread the word, and gives new readers a reason to stay.
Where you are and how to use each channel
Substack
Your conversion engine
The newsletter is where interested readers become invested ones. Every major launch moment — beta recruitment, Best Of features, grand opening — starts with an email. Your Substack list already trusts you. Treat it like the most important channel, because it is.
Instagram
Your awareness and warmth layer
Instagram keeps the community warm between launch spikes. Behind-the-scenes content, book reactions, Stories polls, and reader reshares all do work here. The grid is for landmark posts. Stories are for everything else.
The four marketing spikes
The site stays active in between, but these four moments are where you concentrate energy, coordinate both channels, and ask your audience to do something specific. Everything else is maintenance. These are the pushes.
Phase 1 · May 2026
Beta Recruitment
Goal: Find 15–20 invested early readers who will give real feedback and become the site's first advocates.
How: Substack email to full list + Instagram post + application form. Personal outreach to 5–10 bookstagram mutuals you already know and trust. Keep the application simple — reading habits, favorite tropes, one sentence on why they want in.
Assets needed
Beta recruitment email (Substack)Beta recruitment Instagram captionBeta welcome email for accepted readersApplication form questions
The win looks like: 15–20 accepted betas who open every feedback email. One or two who become genuine evangelists before launch.
Phase 2 · July 2026
Best of 2026 So Far
Goal: Publish your first real editorial feature and drive traffic to the site for the first time.
How: Substack email is the traffic engine — write it in full DB voice, link directly. Instagram grid post with cover art. Stories series going through each pick one by one over 3–5 days. Encourage DM sharing and group chat forwarding explicitly.
Assets needed
Best Of feature Substack emailInstagram grid captionStories copy for individual picks
The win looks like: A feature that gets linked in group chats. At least one screenshot that circulates on its own. New subscribers who found DB through the feature.
Phase 3 · August 2026
Grand Opening
Goal: Make the public launch feel like an event — phased tease builds to a launch week that gives the community something to share.
How: Three-stage sequence: (1) Mystery tease mid-July — name and vibe only. (2) Full concept reveal late July — screenshots, features, voice, no URL yet. (3) Launch day email + grid post + launch week spotlight series. Press kit sent to bookstagram partners the week before launch.
Assets needed
Tease post copyConcept reveal email + captionLaunch day emailLaunch day grid captionLaunch week spotlight captions (4)Press kit outlinePartner outreach note
The win looks like: Launch day traffic spike. At least 3–5 partner reshares. New Substack subscribers from people who found the site cold.
Phase 4 · January 4, 2027
The Double Down Annual
Goal: Establish the first Monday of January as DB's annual editorial moment. This is the one that makes it an institution.
How: Two-email Substack campaign: Jan 3 teaser (The Double Down drops Monday), Jan 4 full send. Instagram anchor post. The Re-Do List is the founding story inside the feature. The first Monday of January is the date that becomes a tradition.
Assets needed
Jan 3 teaser emailJan 4 launch emailAnnual feature Instagram captionYear-in-review stat graphic brief
The win looks like: This feature gets saved, referenced, and linked for months. Readers start asking "when is the Best Of coming?" in December. That is the institution moment.
Partnership strategy
You are not doing cold outreach to strangers. You are formalizing relationships with accounts that already exist in your orbit — mutuals, people whose taste you respect, bookstagrammers whose audience overlaps with yours. The goal for launch is 5–10 partners who share on launch day. That is enough.
Who to approach
BIPOC bookstagrammers who review romance. Accounts that talk about representation in their reads. Readers who have engaged with both Aleia's Library and Tropes and Kisses before launch. Accounts with engaged audiences, not necessarily large ones.
What to ask for
A Story share on launch day, or a mention in a newsletter. Not a formal partnership — just "we are launching, here is everything you need to share it easily." Make the ask small and the assets generous.
What to give them
The press kit: what DB is, screenshots, the URL, a caption they can adapt, and context on why this site is different. They should be able to share without writing a single word from scratch.
When to reach out
One week before launch. Not earlier — you want to be top of mind on launch day. Follow up the day before with a friendly reminder and the final URL.
The principle underneath all of this
Every marketing moment should feel like an extension of the DB voice — personal, specific, and like it is coming from two people who genuinely cannot stop talking about romance novels. The moment it starts to feel like a press release, it stops working. Write every email, caption, and outreach note the same way you write a review.
Every significant marketing action from beta recruitment through the Best of 2026 annual feature. Click any row for the full brief on what to write and why.
Beta Recruitment
Best of So Far
Grand Opening
The Double Down
Draft templates for every major marketing moment. These are starting points — rewrite them in your actual voice before sending. The goal is to cut the blank-page problem, not to hand you copy that sounds like it came from a template.
HubSpot Setup Guide
Keeping DB Data Separate in One Portal
You are running Double Booked Club inside an existing HubSpot portal. Business Units are a separate paid add-on and not available in your current setup. The approach here is naming conventions, contact properties, and list discipline — soft separation rather than hard architectural separation. It works reliably as long as you follow the conventions consistently.
Important
This approach requires one habit above all others: before touching any HubSpot asset — a contact, a list, a form, a page, a report — ask yourself whether it is a DB asset or an existing-company asset. The naming conventions below make this easy to answer at a glance.
The core convention: prefix everything with db_
Every Double Booked Club asset in HubSpot gets the prefix db_ or DB — in its name. This applies to everything: contact properties, lists, forms, HubDB tables, pipelines, reports, workflows, page folders, and email templates.
HubDB tables
db-books, db-features (existing tables have no db- prefix)
DB — Beta Application, DB — Partnership Inquiry, DB — Contact
Pipelines
DB Partner Outreach
Reports
DB — Traffic by Source, DB — The Double Down Annual Stats
Design Manager folder
double-booked-club/ at root — all DB site files live here only
Email templates
DB — [Template Name] (never send DB emails from existing company templates)
Page folders
double-booked-club/ — Content Hub pages scoped to this folder only
The db_role contact property
This single property is what separates DB contacts from your existing contacts. Every person who comes into HubSpot via a DB form gets db_role set on their record. Your existing contacts do not have this property set — you can always filter to DB-only contacts by filtering for db_role is known.
db_role = The Prologues
Beta readers — set automatically on Prologues form submission
Anyone who has covered or shared DB — set manually
db_role = General
Site visitors who filled out the contact form — set automatically
db_role not set
Existing company contacts — completely untouched
What to watch out for
Portal contamination
DBC pages must NEVER be deployed to aleiaslibrary.com. Always verify the domain field when creating pages via API or CLI. A wrong value publishes DB content to the wrong site silently.
Importing contacts
If you ever import a CSV, double-check that you are not accidentally setting db_role on existing contacts, or importing existing contacts into a DB list. Always preview the import before confirming.
Workflows
Any workflow that runs on 'all contacts' will touch DB contacts too. When building workflows for your existing company, add a filter: db_role is unknown. When building DB workflows, add db_role is known.
Email sends
Always send DB emails from DB templates and to DB lists only. Never select 'all contacts' as an email recipient — always use a named list.
Reports
HubSpot reports default to portal-wide data. When building a DB report, always add a filter for db_role is known. Save every DB report with the DB — prefix.
Claude Code
Be explicit about scope. "Update the contact list" is ambiguous. "Update the DB — The Prologues list" is not. The naming conventions are what make this work.
Note
The naming convention discipline is highest in the first month. After that it becomes automatic. The one moment it is most likely to break is during a time-pressured launch week — which is exactly when you can least afford a mistake. Run through the Pre-Launch Checklist slowly and check asset names before you click send or publish.
Portal & Account Setup
Do these once, with your business unit switcher set to Double Booked Club. They affect everything downstream.
Portal settings
Settings → Account Defaults — confirm the switcher is on Double Booked Club before touching anything here.
Company name
Double Booked Club
Company domain
Your DB domain (e.g. doublebookedromance.com)
Time zone
Your local timezone — affects scheduled email send times
Enter your DB domain and follow the DNS instructions. Your registrar needs two CNAME records added — HubSpot shows you the exact values.
3
Allow up to 48 hours for propagation (usually faster). HubSpot handles SSL automatically once the domain verifies.
Important
Do not build pages until your domain is connected and verified. HubSpot generates URLs relative to the connected domain — migrating them after the fact creates redirect debt.
API Key & Claude Code Connection
This is the step that makes everything automated. Once Claude Code has your Private App token, it can build the site, manage HubDB, and update contacts without you touching HubSpot.
Under Scopes, enable exactly these — no more, no less:
cms.domains.read / write
Build and deploy pages to your DB domain
cms.pages.landing-pages.read / write
Create and update Content Hub pages
hubdb.tables.read / write
Read and write the book catalog
crm.objects.contacts.read / write
Create and update Prologue and partner contacts
crm.lists.read / write
Add contacts to The Prologues and Partners lists
forms.read / write
Create and update HubSpot forms
files.read / write
Upload images and site assets
4
Click Create App. HubSpot shows the token once. Copy it immediately — you cannot retrieve it again.
5
Store it in a password manager. If you ever need to rotate it, go back to Private Apps, select the app, and click Rotate Token.
Connect Claude Code
Open a Claude Code session and give it this prompt. Your Portal ID is the number in your HubSpot URL: app.hubspot.com/contacts/XXXXXXX
Prompt for Claude Code
I am setting up Double Booked Club on HubSpot Content Hub Enterprise. My portal already has an existing company — Double Booked Club is a second business unit. Here is my Private App token: [TOKEN]. My portal ID is [PORTAL ID]. Please confirm you can connect to my HubSpot portal, then we will set up the HubDB table structure and begin building the site.
Note
From this point forward, all HubSpot work happens through Claude Code prompts. You should not need to log into HubSpot for routine database updates, page changes, or contact management.
HubDB Book Catalog
HubDB is a relational database built into Content Hub. The Double Booked Club book catalog lives here — one row per book, queryable from any page template. Claude Code creates the table and manages all reads and writes via API.
Important
HubDB is portal-wide, not business-unit scoped. Name all DB tables with the prefix db- so they are identifiable and cannot be confused with existing tables in your portal.
Prompt for Claude Code
Please create a HubDB table called db-books. Set it to publicly accessible via the API. Label it: Double Booked Club — Books. Then create the following columns exactly as specified.
SELECT — DB Review, Aleia's Take, Christine's Take, On Our List, Currently Reading
db_review_url
URL — Joint DB review link
aleia_review_url
URL — Aleia solo review link
christine_review_url
URL — Christine solo review link
bookshop_url
URL — Affiliate-tagged Bookshop.org link
series_name
TEXT — Series title if applicable
series_number
NUMBER — Position in series
blurb
RICHTEXT — 3 to 5 sentence DB-voice paragraph
currently_reading
BOOLEAN — True when actively reading
featured
BOOLEAN — True for Best Of / editorially highlighted entries
debut
BOOLEAN — True if author's debut novel
novella
BOOLEAN — True if book is a novella (typically under 40,000 words)
date_added
DATE — When entry was added
📸 Book Cover Image Specification
When adding or updating book cover images in the HubDB cover field:
✅ Required:
Portrait orientation — standard book cover aspect ratio (~2:3, e.g. 800×1200px or larger)
High resolution — minimum 800px wide; 1000–1200px+ preferred
Front cover only — clean front cover, no borders, no composite graphics, no promotional overlays
Format: JPG or PNG, optimized for web (under ~500KB)
❌ Do NOT use:
Square audiobook images (1:1 ratio) — display incorrectly in the book grid
Low-resolution thumbnails from Amazon or Goodreads previews
Images with "BESTSELLER" banners or badge overlays
Where to find correct images:
Publisher's press kit or media page (highest quality)
Author's official website press/media section
Edelweiss or NetGalley (if you have access)
Never add
Star rating column. Spice level column. Any column that produces a number that could be interpreted as a ranking. The review URL is the signal — not a number.
Day-to-day entry workflow
In the shared Claude Project
"Add Ember by Naima Simone, dark romance, adult, July 2026 — Aleia finished it, no DB review yet."
Claude Project formats the entry. Claude Code pushes to HubDB. Live in under two minutes.
CRM Setup
HubDB handles books. The CRM handles people. Set this up before beta opens — the form feeds the CRM directly and you want the lists ready to receive submissions.
Custom contact properties
Settings → Properties → Contact Properties → Create Property. Create these first, before building lists or forms.
db_role
Dropdown Select — The Prologues, Partner, Press, General
CRM → Lists → Create List → Contact-based → Active List.
The Prologues
Filter: db_role is The Prologues
Founding beta readers. Every accepted beta application sets this property and auto-enrolls the contact. Track prologue_status across the lifecycle: Applied → Accepted → Active → Credited.
DB Partners
Filter: db_role is Partner
Bookstagram accounts, newsletter peers, brand collaborators. Use partner_stage to move contacts through outreach. Tag anyone who shares The Double Down with double_down_participant = true — this becomes your standing annual outreach list.
Press & Media
Filter: db_role is Press
Anyone who has covered or shared DB, or is on the outreach list for The Double Down. Reusable every January. Build it now even if it is empty.
Partner pipeline
CRM → Deals → Pipelines → Create Pipeline. Name it: DB Partner Outreach.
Stage 1: Identified
On the radar, not yet contacted
Stage 2: Outreached
Press kit sent, awaiting response
Stage 3: Confirmed
Agreed to share on launch day
Stage 4: Posted
Shared on launch day or in newsletter
Stage 5: Recurring
Reliable annual partner — contact proactively each January
Note
Use this pipeline for every launch cycle. By January 2027 you will have clear data on who showed up and who did not — which tells you exactly who gets the personal outreach note for The Double Down.
Forms
All three forms live in HubSpot and feed the CRM directly. Every submission creates or updates a contact record automatically. Build the beta application form first — you need it before opening applications.
Important
Before building any form, confirm your business unit switcher is set to Double Booked Club. Forms created under the wrong business unit will not appear in DB analytics and will have to be recreated.
The Prologues — Beta Application
Build by April 21. Embed on a private, unlisted HubSpot page — not indexed by search.
Fields
First Name
Required. Standard HubSpot property.
Email
Required. Creates the contact record.
Pronouns
Optional. Create as custom property first.
How did you find us?
Single-line text. Maps to source_detail.
Your top 3 romance tropes
Multi-line text. Free response.
Books per month
Dropdown: 1 to 2 / 3 to 5 / 6 to 10 / More than 10.
What should a BIPOC romance database do...
Multi-line text. Required.
Anything else?
Multi-line text. Optional.
On submission
Set db_role = The Prologues. Set prologue_status = Applied. Notify your email immediately. Redirect to a private thank-you page.
The URL for this form goes in the Substack recruitment email and the Instagram bio link only. Do not index it publicly.
DB Partnership Inquiry
Build before grand opening. Embed on the Partnerships page.
Set db_role = Partner. Set partner_stage = Identified. Notify your email.
This form is the inbound track. Outbound partners go directly into the CRM via Claude Code — you do not need them to fill out this form.
DB Contact
Build before grand opening. Embed on the Contact page (footer link only).
Fields
First Name
Required.
Email
Required.
Message
Multi-line text. Required.
On submission
Set db_role = General. Notify your email.
Keep this minimal. It is a catch-all, not a pipeline entry point.
Content Hub & Site Structure
Claude Code builds and maintains the actual site files — HubL templates, CSS, JavaScript. Your role here is to set up the structural scaffolding so Claude Code has a clean environment to work in.
Design Manager folder structure
Marketing → Files and Templates → Design Manager. Create this folder structure before handing off to Claude Code.
Primary entry point. Queries db-books HubDB table. Filterable grid by trope, genre, age range, review status. Trope search event fires on filter selection.
Book detail
Individual book page. URL: /books/[slug]. Renders from single HubDB row. Includes cover, blurb, tropes, review links, Bookshop.org affiliate link.
The Double Down
Annual Best Of feature template. Editorially laid out — not a database view. Reusable each January.
Best of So Far
Mid-year feature. Same template structure as The Double Down, different content.
About
Who DB is, who Aleia and Christine are, The Prologues credit section, links to both Substacks.
Partnerships / Work With Us
Partnership inquiry form embedded. What DB offers, who the audience is.
Contact
General contact form only. Minimal.
Beta application (unlisted)
Private page for The Prologues form. Not in navigation. Not indexed.
Thank you (unlisted)
Post-form redirect. One warm sentence. Link back to the database.
Prompt for Claude Code
Please build the Double Booked Club site in my HubSpot Content Hub portal using the Design Manager folder structure at double-booked-club/. Start with the Home template — it needs to query the db-books HubDB table and render a filterable grid with trope, genre, age range, and review status filters. Use the DB brand palette (dark: #2C1F10, sand: #D4A06E, blush: #DE9A7A, blue: #497DCB, ink black: #1A100A, cream: #EDE7E7) and fonts (DM Serif Display for headings, Nunito Sans for body, monospace for labels and chips).
Navigation
Main nav
Books — About — Work With Us
Footer
Contact — both Substack links — Bookshop.org affiliate — The Prologues credit
Not in nav
Beta application page, thank-you page — both unlisted
SEO basics
Page title
[Page Topic] | Double Booked Club
Meta description
Under 160 characters. In DB voice — not a keyword list.
Open Graph image
What shows when the link is shared in iMessage or Instagram DMs. Upload for Home, About, and every Best Of feature page. This is your highest-leverage SEO asset.
Analytics & Reporting
HubSpot Analytics is built in — no separate tool to install. Track the metrics that tell you how DB is growing, not vanity numbers.
Traffic analytics
1
Reports → Analytics Tools → Traffic Analytics. On by default for Content Hub pages.
2
Confirm your DB domain appears under tracked sources.
3
Set default date range to Last 30 days.
4
Bookmark Traffic by Source — this is the report you check after every marketing spike.
Trope search event
This custom event tracks which tropes readers filter by. It is the most important data point for backfill prioritization and The Double Down stats block.
Prompt for Claude Code
Please add a HubSpot custom behavioral event called db_trope_search to the trope filter on the Home template. It should fire whenever a reader selects a trope or microtrope, and pass the selected value as trope_selected. Also capture genre and age_range if they are filtered at the same time.
Once live, find it at Reports → Analytics Tools → Events.
Three reports to build and save
Traffic by source
How readers find the site: Substack referral, Instagram referral, organic search, direct. Run this after every launch spike. If Substack drives more traffic, double the email. If Instagram drives more, invest in the share-to-Stories flow.
Form conversion — Prologues
Applications submitted vs. sessions on the beta page. Under 20% conversion means the copy or the page needs work.
Top HubDB entries by page views
Which book pages get the most traffic. These are your first affiliate link priorities and your best candidates for DB joint reviews.
The Double Down annual stats report
Build this now so December 28 is not a scramble. Save it as: The Double Down — Annual Stats.
Total books added
Count of HubDB rows where date_added is in the current year
Debut authors
Count where debut = true
Review breakdown
Count grouped by review_status
Top 5 tropes
Count grouped by tropes field, top 5 values
Most searched trope
Pull from db_trope_search event data in Analytics Tools
Note
Run this report December 28. Paste the numbers into The Double Down structure template. The stats block is the section most likely to get skipped — do not skip it.
Integrations
In priority order. Substack has no public API and cannot connect directly to HubSpot — the workflow below accounts for this.
Substack — manual sync
Substack has no API. There is no native HubSpot integration and no Zapier trigger available. The connection is manual: export your Substack subscriber list periodically and import into HubSpot CRM as a contact update. Do this monthly, or after any major spike.
Steps
1
In Substack: Settings → Subscribers → Export. Downloads a CSV of all subscribers.
2
In HubSpot: CRM → Contacts → Import → File. Map email column to Email property.
3
Set db_role = General on import to distinguish Substack subscribers from Prologues or partner contacts.
4
Do not attempt to manage Substack subscribers from HubSpot — Substack is the source of truth for your newsletter list.
This is a one-way sync — HubSpot learns about Substack subscribers, but Substack does not learn about HubSpot contacts. New contacts created in HubSpot (from forms) do not automatically become Substack subscribers.
Bookshop.org Affiliate Links
No integration exists — affiliate links are just tagged URLs. The workflow is to store each book's affiliate URL in the bookshop_url column in HubDB and render it automatically on every book detail page.
Steps
1
Go to bookshop.org/affiliates and create your affiliate account. You will receive an affiliate ID.
2
Tell Claude Code your affiliate ID. It will batch-generate tagged Bookshop.org URLs for your existing catalog and populate the bookshop_url column in HubDB.
3
The book detail template automatically renders the affiliate link — Claude Code builds this into the template on initial build.
4
For new books added via the Claude Project, include the Bookshop.org URL in your entry prompt if you have it.
Bookshop.org affiliate commissions are small but they signal to future partners that you treat DB as a business. Set it up before grand opening.
Instagram — HubSpot Social
Connecting Instagram to HubSpot Social lets you schedule and publish posts directly from HubSpot during launch spikes, and pulls Instagram referral data into your traffic analytics automatically.
Steps
1
Marketing → Social → Connect Account → Instagram Business.
2
Connect the primary DB-adjacent account. If both Aleia's Library and Tropes and Kisses are Instagram Business accounts, connect both.
3
Once connected, Instagram referral traffic appears automatically in your Traffic by Source report.
This requires an Instagram Business or Creator account — personal accounts cannot connect to HubSpot Social.
Google Search Console
Pulls organic search query data into your HubSpot traffic reports. After a few weeks of launch, you will see the phrases readers type to find BIPOC romance — which informs future blurb language, page titles, and which tropes to prioritize in backfill.
Connect Google Search Console. You will need to verify ownership of your domain in Search Console first if you have not already.
3
Data starts appearing in HubSpot within a few days of connection.
HubSpot CLI — Setup & Deployment
The HubSpot CLI lets you upload and watch template files from your local machine directly into the Design Manager — faster than the UI and essential for Claude Code workflows. Configured as of the current build session.
Install & authenticate
1
Install globally: npm install -g @hubspot/cli
2
Authenticate: run hs auth in your terminal. Follow the prompts — it opens a browser to authorize against your portal.
3
A hubspot.config.yml file is created in your project root. Add this file to .gitignore immediately — it contains your portal credentials.
Important
The CLI uploads to draft by default. Files are visible in the Design Manager but not live on the site. You still need to push live via the HubSpot UI (publish button) or via the API. Do not assume an hs upload = live page.
404 error page — deployed
Status: built and deployed
Template path
double-booked-club/templates/db-404.html
Template ID
210451673958
Copy / voice
Bestie, this URL does not exist and we are not okay about it either.
Important
Error page templates have a specific annotation requirement that differs from regular HubL templates. Getting this wrong means the template never appears in the system pages dropdown.
Important
The root domain is not yet primary. This must be resolved before grand opening or the site will not load correctly at the root URL.
isPrimarySitePage
Still false on doublebookedromance.com
Current workaround
Redirect ID 210428491857 sends https://www.doublebookedromance.com/ to /coming-soon
Action required
Set doublebookedromance.com as primary domain before launch — Settings → Website → Domains & URLs
Cleanup needed
aleiaslibrary.com/dbc-coming-soon is still Published — unpublish or delete manually in HubSpot UI
Known Gotchas
Specific errors, surprises, and non-obvious behaviors discovered during the build. Reference this before starting any Claude Code session involving templates, forms, CLI, or domain configuration.
Critical
Portal contamination — never deploy DB pages to aleiaslibrary.com
DBC pages must never be deployed to aleiaslibrary.com. Always verify the domain field when creating pages via API or CLI. The two sites share a portal — the domain field is the only thing separating them. A wrong domain on a page create call will publish DB content to the wrong site with no warning.
Critical
Error page annotations — HTML comments only, never HubL
Error page templates must use HTML comment annotations, not HubL style. HubL annotations do not work for error page templates and will cause the template to never appear in the system pages dropdown.
hs upload puts files in the Design Manager but does not publish them. You still need to push live via the HubSpot UI or via the API. Never assume a successful CLI upload means the page or template is live.
Gotcha
hubspot.config.yml must be gitignored
The CLI config file contains your portal credentials. It is created in your project root on hs auth. Add it to .gitignore before your first commit — if it gets pushed to a public repo, rotate your Private App token immediately.
# .gitignore
hubspot.config.yml
Gotcha
HubSpot forms have no native placeholder support
Using placeholder attributes directly on HubSpot form fields does not work — HubSpot strips them on render. The established pattern is to hide labels via CSS and copy label text into placeholder attributes via the onFormReady callback. See CLI & Deploy tab for the full pattern.
Gotcha
Root domain isPrimarySitePage is still false
doublebookedromance.com is not yet set as the primary domain. Redirect ID 210428491857 is handling the root URL workaround. This must be resolved in Settings → Website → Domains & URLs before grand opening.
Cleanup
aleiaslibrary.com/dbc-coming-soon needs to be unpublished
A workaround coming soon page was published at aleiaslibrary.com/dbc-coming-soon during early setup. It is still live. Unpublish or delete it manually in the HubSpot UI — it should not be visible to readers.
Pre-Launch Checklist
Run through each section at the milestone date. Do not skip items — the ones that seem optional are usually the ones that break at launch.
Before beta opens — late April
Before grand opening — early August
The Double Down sequence — late December
Coming Soon Page
The launch landing page — deploy this on HubSpot while the full site is being built.
Before you deploy
1
Upload the logo first
Go to Marketing → Files → Upload File in HubSpot. Upload Double_Booked_Logo.png. Copy the CDN URL it generates — it will look like files.hubspot.com/xxxxxxx/Double_Booked_Logo.png.
2
Replace the logo placeholder
In the HTML below, find and replace it with the actual CDN URL before deploying.
3
Verify your Bookshop URL
The Bookshop link points to bookshop.org/shop/aleiaslibrary — affiliate ID 103367.
Claude Code deploy prompt
Paste this into Claude Code
Please deploy the coming soon page for Double Booked Club to HubSpot. Create it as a published landing page at the root URL (/). Use the HTML I am about to paste. Set all other pages — including any draft pages from our earlier session — to private or draft status. This should be the only publicly visible page on the site until I say otherwise.
[Paste the HTML below after this message]
Ready-to-deploy HTML for every DB site page. Live preview + copy button on each.
A public page for authors and publishers to submit books for database consideration only — not review copies. Every submission enters a CRM pipeline for review before anything goes live in HubDB.
Live preview
preview
HubSpot pipeline — DB Book Submissions
CRM → Deals → Pipelines → Create Pipeline — name: DB Book Submissions
Under ReviewYou or Christine are evaluating the book.
Needs InfoYou have questions. Triggers email to submitter.
ApprovedWebhook fires. Claude Code creates the HubDB row. Submitter gets confirmation email.
DeclinedPolite decline email fires. Deal closes.
Hidden fields — submitters never see these
self_submitted = trueFlags every form entry for review before HubDB inclusion
review_status = On Our ListDefault status set in HubDB when deal is approved
submission_source = author_publisher_formLets you filter HubDB entries by how they were added
Claude Code prompt — webhook setup
Please set up a HubSpot Workflow that fires when a deal in the DB Book Submissions pipeline reaches the Approved stage. It should call a webhook that creates a new row in the db-books HubDB table using the deal properties, with review_status set to On Our List and self_submitted set to true. Also trigger a confirmation email to the submitter email stored on the associated contact.
The HTML
The About page structure is complete. Two sections need to be written before deploying — the host bios and The Prologues credit list. Everything else is live-ready.
Live preview
preview
Fill in before deploying
1
Aleia bio
Find [Aleia bio] placeholder. 3 to 5 sentences in your voice.
2
Christine bio
Find [Christine bio] placeholder. 3 to 5 sentences in your voice.
3
The Prologues
After beta closes — add founding reader names to the credit section.
The HTML
The newsletter signup page. Dark-themed, links to both Substacks, and includes a placeholder form where you embed the HubSpot form on deploy.
Live preview
preview
Before deploying
Replace the placeholder email form with a HubSpot form embed. Form name: DB — Newsletter Subscribe. Set hidden fields: db_role = General and source_detail = newsletter_page on submission.
The HTML
Press and media kit page. Update the stat placeholders ([N]) after launch by pulling from HubSpot Analytics and HubDB. Coverage section is ready to receive items as they come in.
Live preview
preview
Update after launch
[N] booksPull from HubDB — count all published rows
[N] reviewsCount rows where db_review_url is not empty
[N] subscribersCombined subscriber count across both Substacks
The HTML
The Representation page groups the catalog by identity tag — each section shows book cards with placeholder covers. Populate with real titles and cover URLs once the database is live. 3 picks per identity at launch minimum.
Live preview
preview
Populate before launch — Claude Code prompt
Query the db-books HubDB table and group results by identity_tags. For each identity category on the Representation page, pull the 3 most recent books with that tag. Render each book card with cover_url, title, and author. Replace the placeholder cards in the HTML.