The Soul Company, Inc.
See it livePricingBook a demo

Everything, with the date it happened.

Generated from the repository, not written for this page. It includes the days something broke and how it was found, because a changelog with only wins in it is an advertisement.

844
changes in 90 days
54
days with something shipped
9
day run, most recent
Jul 29
Wednesday
22 changes
9d3aad2
Send the customer a recap, not a dashboard
The buyer pays every month and has no way to see what they got. They find out by asking, which is the renewal conversation we cannot win, and it is also the demo that would sell the next customer.
11232eb
Make it scroll, and finish removing the labels
The scroll stutter had two causes and both were paid on every page whether or not anyone benefited.
7eb4f8d
Say how the agent actually works, and stop saying Soul twice
Every page claimed the agent does the job and no page said how, which leaves the reader to assume "AI" means a prompt behind a button. That assumption is the one standing between us and the buyers who matter, and the way past it is not a louder claim, it is the parts list.
2b75fe4
Read the company's own design language, instead of asking for a hex
The embed renders inside somebody else's product, and the whole of a company's brand was two columns: an accent hex and light-or-dark. That is not a design language, it is a guess with two variables. Seven brands had a hand written skin. Everybody else got the same rounded sans card in whatever colour they passed, which is the tab a customer's designer opens once and calls a widget.
c63711f
Stop labelling every section, and open the door before the price
Two things a visitor reacts to before reading a word.
cb7e994
Did anyone actually turn up
Every number in this product was a promise. An RSVP is made on a Tuesday about a Saturday, at no cost, and a system trained on promises programs for the version of people they imagine they are: everyone signs up for the 6am run and nobody stands in the park. Attendance is the one question every conversation about this company comes back to, and until now the code had no way to answer it.
6f18aa6
Run the agent on its own, and stop reaching for a generic event
Three things the agent was supposed to do by itself and did not.
7819d59
Record the canonical read and the booking page
56b4703
A demo page, instead of throwing people at a calendar
Every "book a demo" on the site pointed straight at a raw calendar link, which asks a buyer to pick a slot before they have told us anything, loses everyone browsing at 1am who is not ready to commit to a time, and leaves no record of who came close.
e3c74e3
Record the AI pipeline and the new feedback loop
770dcc8
Do not claim a turnstile we do not have
The moat page said we hold the record of who committed, who arrived and who came back. We hold commitments. Arrival is the version that matters and it is the thing being built toward, so the page says which one we have and which one we do not, in the same sentence as the claim.
6155a12
Give the agent a memory of what filled
It had none. It read what a company's users say they are into, wrote gatherings, and then never once looked at whether anyone turned up. A gathering that drew nobody three weeks running would be written again, in the same words, forever, and the claim that the attendance record tunes what gets programmed next was simply not true of the code.
6a968e8
Manager, not team
Team is vague and sounds inflated. Manager is a real role, with a real salary attached, which is the entire argument: a company reading "$999 a month" next to "the community manager you were about to hire" does the arithmetic without being walked through it. Nobody has a line item for a team.
1f1cc0e
Record the withholding rules and the staleness trap
d873042
Withhold what should never be on a public page, and say how much
The shipping record is generated from commit messages, which were written for other engineers rather than for the internet, and reading them back as a public page turned up three things that should not be there.
f58c4db
Record the changelog and the install-path audit
5fbe7f4
Test the path a non-technical buyer actually pastes
The markup-only mount is a different code path from Soul.Community(), and it is the one someone in Webflow or a CMS field will use, so the browser run now checks it renders rather than assuming it does.
aceec5e
Serve our TypeScript types as text, not as video
.ts maps to MPEG transport stream in every standard mime table, so soul.d.ts was going out as video/mp2t and the install script as x-install-instructions. Both work in practice, and both are exactly the detail a technical buyer notices while deciding whether we are serious.
7f5a2f0
Publish the shipping record
A changelog generated from git rather than written for the page. 824 changes over 56 days, the days something broke included, because a changelog with only wins in it is an advertisement. A build step reads the history and writes the entries, so nothing on it can be posed after the fact, and anyone can check it against the repository.
5d832b9
Record the board-first change and the two new pages
6ec1d95
Answer the hard version of every question, in public
Two pages, for the reader who arrives asking how this becomes a company rather than what it does.
e592782
Show the board, then ask
The tab opened on a join screen and then a connect screen, so a person had to get through two full pages before seeing a single gathering, and anyone evaluating Soul saw a signup form where the product should have been. Nobody joins a community they have not been shown.
Jul 28
Tuesday
16 changes
7e0be19
Name the request that failed
ERR_BLOCKED_BY_ORB with no url is a dead end, and ORB is almost always a content-type problem on one specific file. The harness now maps request ids to urls so a failure says which one.
c2499aa
Kill the caption under the product
A line of tiny uppercase mono telling someone the panel scrolls. If a panel needs a label explaining that it scrolls, the label is not the fix.
ed9583a
Record the SDK hardening and the badge bug
fb99437
A capped frame still has to scroll
scrolling=no turned the product panel into a screenshot with a card sliced in half at the bottom edge, and anyone who tried to see the rest found the page dead under their fingers. The cap exists so the marketing page does not scroll through eight gatherings, not to stop someone reading the ninth. It scrolls inside again, it says so, and the left column now ends in a CTA instead of empty black.
780f1a0
Give the left column something to hold
Moving the section heading beside the product instead of above it. The split had four short feature lines standing against a 600px device and the rest of the row was empty black, which reads as a layout that broke rather than one that was chosen.
d1e3878
Make the SDK survive a bad day, and find a bug by looking
The badge has been telling every customer "Nothing on yet" and it was us. Internal callers forward identity positionally, so after Soul.init() the forwarded object carries partner and user as properties that exist and are undefined, and those wrote over the real values from config. The request went out as /api/embed/events?limit=8 with no partner at all, the API refused it, and the badge reported an empty city. It reads as "nothing is happening near you", which is the most damaging possible way for a broken call to fail.
96dbef9
Record the pricing lock
cf47e72
Record the three causes of a board that was not theirs
8e1fab6
Every company's board is entirely their own
The fill was right and the supply was short. A partner board holds eight and curation only ever programmed four, so the other four slots went to Soul's shared city gatherings on every single board. The default is the whole board now, and if the model returns fewer than asked, or dedupe eats some, the shortfall is topped up from the audience-matched archetypes rather than left open for someone else's events to fill.
6b742be
Redeploy: board fill did not reach production
53105b0
A company's board is theirs, not theirs plus everyone's
Partner-first ordering only sorted, so the same shared city gatherings still sat underneath every single board. Six companies saw six identical tails, and the tab read as a directory we had dropped into their app rather than their community.
5d5650f
Community as a service, and the two paths that need no code
Now that /embed can actually be framed, the integrations that need no JavaScript are real and documented: a div with data-soul for anywhere that lets you paste HTML but not write code, and a plain iframe for anywhere that blocks scripts entirely. Both on the sandbox page and in SKILL.md, both verified rendering on a domain that has nothing to do with us.
e1ccdde
Our embed refused to be embedded
X-Frame-Options SAMEORIGIN and frame-ancestors 'self' were set on every route, including /embed. Soul's entire product is an embed rendered on a customer's own domain, so every real integration would have been a blank box. Every demo on our own site kept working because it is same-origin, which is exactly why this survived: the thing that hid the bug is the thing we kept testing.
aa538cb
Strip em dashes from gatherings written before copy was sanitised
66887b5
Types, and the numbers a technical buyer checks first
An engineer evaluating this does not read the copy. They look for the bundle size, the dependency count, what happens when your service is down, and whether there are types. We had none of that on the page and no type definitions at all, which for a JavaScript SDK is the first thing a good team notices.
7fc8802
Five kinds of gathering, and one rule for who sees them
Collabs, hosted rooms, takeovers and Soul exclusives were an idea rather than a thing the system understood. Now they are a field, with the visibility rule in one place: anything Soul programs is open by default because a room needs people in it, anything a partner makes is private by default because their name is on it.
Jul 27
Monday
23 changes
088c807
A partner's own gathering is a partner's own gathering
Two kinds of gathering, and they should not have shared a rule. Soul-curated ones stay shared by everyone, because that is the density engine and it is most of the board. Partner-hosted ones are now that partner's own users only, unless they explicitly name another partner in collab.
f101ad5
Partner-first ordering, and lead with the role we replace
THE ORDERING. Rooms stay shared, because a gathering needs six to fifteen people who are free and nearby, and splitting the network across every customer leaves every board empty. But a company's tab should open on what is theirs. A gathering they hosted outranks everything, a collab they are on comes next, and one their own users are already going to gets a gentle nudge, deliberately small so it never buries a better match. Each gathering now carries how many of that partner's own users are going, and says so as a reason.
1ace8f1
Pricing cards you can actually scan, and one less overclaim
The biggest text on each card was a description while the tier name was a tiny label, so three cards took real effort to tell apart. Names lead now. "The tier instead of the hire" was our sales logic talking rather than the buyer's situation, so it says what is true of them instead.
0cb4c14
Say the thing nobody else can say
"The AI community team" names a category. It does not claim anything, and a category label is not a reason to switch. The hero now leads with the one line that is true of us and false of everyone else: every other community tool ends on a screen.
01804dc
Document the connect honesty fix, the agent install path and the ranking bug
8f8e365
Rank across the week, then cut, not the other way round
limit was going straight into the database query, so a partner asking for three gatherings got the three soonest and we reordered those three. The 6am run that actually matched an early riser was fourth on the calendar and never entered the candidate set, which meant the ranking looked like it did nothing. Found by driving the live API on production rather than reading the code.
c7d2d0c
Footer stops falling apart on a phone
Six links in a row that never wrapped. On a 390px screen "Why it is hard to copy" broke into a column of single words and "Book a demo" ran off the right edge. The row wraps now, every label stays on one line, and that link is "The moat", which is what it should have been called in a footer anyway.
061292a
Retire the last pages selling a company we no longer are
/for-you was still pitching an invite-only consumer membership where your face is your key, which contradicts instant membership and contradicts the company we sell to now. It redirects home. The careers page was hiring someone to sign venues into soul spots one pilot at a time, a job that no longer exists; it now describes signing companies. The public board called a place a soul spot, which implied a paid relationship that no longer exists either.
8d6b37c
Three tiers, a paywall that actually holds, and a way to buy it
The pricing page was decorative. Any company could call the API with a slug we had never seen and no key, forever, so there was nothing on the other side of $199. Now there are three outcomes and the middle one is the business: an unregistered slug is a free sandbox with inert writes, a registered slug with a live subscription is the real thing, and a registered slug whose subscription lapsed gets a 402 on reads and writes both. A lapsed partner never falls back to the sandbox, because that would hand them the product for free.
b434fbf
No public page still selling a business we retired
/how-it-works had no page at all and 404'd on the stock Next.js screen, the one page on the site that looked like nobody built it. /for-business was still selling the $250 venue subscription to a buyer who had just read that we charge $199. Both now land on pricing, and 404s wear the brand: warm ground, serif, the green kick, and a way back into the product.
4726f18
Pricing wears the same clothes as the rest of the site
It shipped as a stark white bold-sans SaaS table: no atmosphere, no serif, hard black cards. Next to the homepage and the sandbox it read as a different company's page. Now it is on the shell everything else uses. Warm ground, serif display, mono caps labels with the green dot, glass cards.
a083462
A playground that runs the real SDK, and a link preview from this decade
TRY IT, DO NOT WATCH IT. The sandbox showed a static iframe and asked you to believe the rest. Now /developers loads the published sdk.js the same way a customer does and calls the same endpoints. Pick a brand and the tab reskins. Run any method and the exact code, the real response and the latency land in the console. RSVP inside the tab and your own callback fires in the panel below, which is the only honest way to show the bridge works.
378f373
The whole SDK, free public places, and the price in public
THE SUPPLY RULE. Every gathering now happens somewhere free, public and walk-in: a park, a waterfront path, a coffee shop, a bookstore, a market. Nothing is reserved, nobody holds a table, and if money is spent each person buys their own. The curation agent is held to it in the archetypes and in the prompt, and the preference for paying partner rooms is gone. This is what lets the agent program a city it has never touched for a company that signed up an hour ago, and it is why the price can be what it is.
b29cf5a
Open an event, open a person, see your own signal
The embed was a list with an RSVP button. A partner evaluating Soul taps a gathering and nothing happens, so the whole thing reads as a mockup. Now every row opens.
a5a1308
One command, any stack: /install now covers eleven project types
The installer only understood web. Krishi's ask is that one command drops Soul into any company's app no matter what it is built in.
fe38247
Stop showing Connect buttons for things that are not wired
Krishi's point: a Connect button that quietly assigns invented tags is worse than no button. /connect now shows what each source actually is.
a9ec7b5
Meetups cards on the same glass
/meetups had the atmosphere but its cards were still flat white, so the one page that is entirely cards was the one page that did not look like the product.
9082269
One surface language across every member page
/home, /tonight, /meetups, /connect and /try were each on their own flat white treatment while the marketing site had moved to the atmospheric system. Same company, five different looks.
cd42f49
Home board: stop showing a New Jersey member gatherings in Florida
When a member's city had no upcoming meetups, /home fell back to the next six active meetups ANYWHERE and labelled them 'the network, matched to you'. A member in Princeton Junction was shown a golden-hour walk in Port St. Lucie and a dinner at Indiana University as if they were his. Useless and untrue.
4ef534f
Wordmark is the full legal name: The Soul Company, Inc.
Every site nav read just 'Soul'. Now the full company name everywhere, with the type sized down (28/26 -> 17-20px, 15px on small screens) and nowrap, since a 22-character wordmark at display size would wrap or overflow the bar.
5f5793d
The sandbox: try the SDK end to end, see every company at once, and read the user
Krishi needed to be able to try the whole system and see it working, plus an honest answer to "how does the AI understand users, and what do we do with their data". Built at /developers, on the atmospheric glass finish he flagged.
1fcfd9d
Document local dev setup and the three bugs found by running it
62988e2
Run it for real: fix the embed on desktop, a contrast bug, and the log noise
Ran the app locally against a real database and drove the whole product with a browser instead of trusting status codes. Three real bugs, plus the local setup that was making it unrunnable.
Jul 26
Sunday
7 changes
af0db38
Document the timezone rule, the connector contract, and the desktop fixes
7bd0dfd
Connect page: cards, not squeezed rows
Two columns crushed the description between the icon and the button. Each connector is now a card (header, description, action), the wrap is wider, and the grid drops to one column under 1180 where a row layout reads better.
c1b60ac
Desktop must be horizontal: legal pages + connect list
The legal pages were a 720px centred column in a sea of white on desktop, which is exactly the stretched-phone look the desktop rule forbids. LegalShell is now a sticky title rail plus a two-column clause grid using the full width; it collapses to one column under 1080 and stacks under 900.
2849214
Prove the connectors work: 43 tests, and fix the timezone bug they caught
The six new connectors had never touched a live account, so they were only "working" in the sense that they compiled. Tested them against payloads shaped like the real API responses. Two real bugs fell out.
0d14963
Document all 8 connectors + the setup requirements
89b8642
Add every integration we can actually build: 6 new real connectors
Goes from 2 real integrations to 8. Each is a real OAuth consent screen, a real token exchange, and a real data pull. All six are self-serve developer apps with no partnership required.
4201127
Document the Jul 26 cleanup + OAuth registry + one-command install in CLAUDE.md
Jul 25
Saturday
11 changes
0a190b1
Remove the fabricated 'S' badge from the embed join/connect screens; green gradient glow on the dark sections (not flat black)
46ea8a7
Homepage: enterprise data/AI/compliance section (what we read, how it matches, consent+GDPR/CCPA, where data lives) on the green dark system
f5f8f45
SDK full journey: join -> connect your data -> AI matches you to your people -> community (real events, who's going, RSVP). /api/embed/connect sets affinities, matcher ranks the community into 'people you'd click with'.
dfed513
SDK full flow: Join screen -> community (real people in it + who's actually going by name + RSVP), real join via /api/embed/rsvp (join-only supported). Kill redundant 'inside every app' tag, footer white to match, looser mobile hero.
5ec5e61
Harden /api/embed/rsvp: rate-limit 40/min per IP
0554660
Embed premium redesign: glass + depth cards, featured hero event with accent glow, hover/RSVP motion, refined per-brand hierarchy (Light e-ink stays minimal). Real RSVP kept.
50a56c4
Embed: premium per-company design (real brand fonts per partner, clean Community tab, native cards), strip all AI filler microcopy (no 'real RSVPs live' / 'Soul is filling it now' / self-narration). RSVP -> Going toggle, real persistence kept.
1ec2737
SDK is now REAL, not a mockup: /api/embed/rsvp does a real join (lazy partner-scoped Soul member) + persists real RSVPs; /embed rewritten to render REAL meetups with a working interactive I'm-in/going toggle (EmbedCommunity client). No schema change (reuses WaitlistEntry/Meetup/Rsvp).
cae0016
Delete standalone /developers + /preview pages (redirect to homepage #sdk); repoint all in-content links to the in-page SDK section. Everything now lives on the one homepage scroll.
c74e4c4
Mobile: tighten dark-flow + SDK + CTA section padding on phones
7227348
Fold SDK + live demo into the homepage as a scroll section (HomeSdk); nav stripped to logo + See it live (#sdk) + Book a demo, no page tabs; all demo CTAs scroll in-page; logo strip label -> 'coming soon to the apps you already use'. /developers janky headline fixed.
Jul 24
Friday
24 changes
2e99e6b
Tighter hero tagline: 'One embed. Off the feed, into the same room.'
9b18621
Site-wide mobile optimization: kill horizontal overflow, collapse grids to 1-col on phones, clamp oversized serif headlines, 40px tap targets, 16px inputs, responsive padding across all pages. Presentation-only, logic preserved, build passes.
d3931e0
Sharper hero tagline ('One embed takes your users off the feed and into the same room') + hero mobile hardening (svh height, mobile clamps/padding)
e7c5ef1
/developers headlines to serif (Instrument Serif) — core demo path (home, preview, developers) now fully on-brand
a342c67
/preview on-brand: light ground + serif headline + dark text + light door pills + product-shot phone shadow (matches homepage). Preserves door/stage/iframe logic.
67e68a5
Hero legibility: soft dark halo behind center text + white serif headline/sub (nav + logos stay dark over the light top/bottom), keeps the airy photo
b433d12
Remove the off-brand /how-it-works page entirely (delete page + nav link + footer link)
34fc9e2
Fix Book a demo button: nav link color was overriding the button's white text (specificity), text now stays white on hover
977dfd7
Add hero photo (misty hills) as public/hero.jpg, fills the homepage hero behind the headline
c1e1ece
Richer atmospheric hero fallback gradient (layered radials + depth) so the hero reads intentional until /hero.jpg is dropped in
cb48889
Rebuild /manifesto (why this matters) on the modern white Geist system, remove face-check language, tighten copy; add real footer with The Soul Company, Inc. to homepage + /developers
d45c688
Global Geist font (one typeface site-wide); homepage: logo not paragraph, one CTA, drop duplicate demo link; SDK + how-it-works: remove face-check language, present all tech as proprietary (no Claude foregrounding), cut wordiness
35185f4
Align the whole site on one modern system: rebuild homepage (white, bold sans, dark how-it-works panel, partner-skin fan) + reskin /tonight /meetups /verify /for-business and /preview chrome to match /developers and /how-it-works. Presentation-only, all logic/data/camera/RSVP flows preserved. Full build passes.
7f3a3e8
Website is now self-contained: rebuild /how-it-works as the authoritative concept + full software-built inventory page (one-network-many-doors, the 3 paying sides, everything shipped, the stack + proprietary Soul Agent). Modern white system, linked in homepage nav.
21b5003
Golden SDK page: any-company positioning, real copy-paste embed snippet + copy button, live render, everything-in-the-box, and the Soul Agent + full stack surfaced. Kill the fake Acme mock (real host shell), modern design system (no serif-cream).
3fea8c5
Remove the hover lift/scale/rotate on the fan cards (static on hover)
30ca505
Curated small table (6-8, matched, reservation held by Soul concierge) added to the widget per partner — the higher-intent format
1d990f4
Killer feature: the featured event is now the AI pre-curated 'you're in' offer — 'CURATED FOR YOU', the reason you're on the list (your data), avatars, and I'm-in/Not-this-time. Per brand.
38bc207
Fan cards pop forward on hover (straighten + scale + lift + front z-index, smooth transition). Consent screen added to rollout (invite -> consent -> community) showing data handling per partner.
6c8c7ce
Per-brand /preview: each door shows that company's own invite + loads the REAL native per-brand widget (iframe of /embed) as the community — no more one generic app. Force-fix mobile fan overflow.
782e01c
Mobile overflow root cause: reduced-motion fallback applied the desktop fan rotate/translate on mobile, pushing cards past the viewport. Scope that transform to desktop only. Fixes the right-edge cutoff across the mobile site.
7c9bd5d
Mobile: kill horizontal overflow (overflow-x hidden on root + html/body), tighten top bar + pills on small screens
a746b98
Mobile optimization: responsive section/card padding (clamp), hide desktop-only nav links on small screens, /preview + /developers stack cleanly and fit the phone to viewport, no vertical-centering on mobile
06393ef
Matching engine (lib/network/match.ts): weighted-overlap similarity -> people you'd click with + the 1:1 to meet, swappable for cosine-over-embeddings. Widget now shows the full matched flow (events + people + one-to-meet) per partner, powered by the engine. Book a demo -> real Google Calendar booking link.
Jul 23
Thursday
26 changes
700f615
Remove 'Robinhood Social' references (legal); Book a demo -> Google Calendar; fix brown showing under scroll (body bg #1c1a16); center /preview layout so it's not top-heavy
01e958f
Widget = featured hero (cover band + big title + avatars) + compact cover-tile rows, per brand. Reads like a real feed, not identical cards. Light stays minimal e-ink.
e82572c
SDK widget (/embed) redesign: premium glass cards with depth + backdrop blur, warm Fraunces serif titles (human font), who's-going avatars, accent-tinted chips, glowing join button. Lifts SDK quality everywhere it renders.
7e1edce
Wordmark to Instrument Serif (cleaner than Fraunces at giant size); fix Book-a-demo pill going grey on hover (specificity); rip dead 'your face is your key' + 'verified human' from /preview (face-scan is gone) -> 'one membership, every door'
5c30f52
Fix: middleware was redirecting /preview, /developers, /embed to home — whitelist them so the demos and SDK actually load
84b6375
REAL SDK: hosted /sdk.js (Soul.Community script-tag embed, no npm) that mounts the live community into any page; /embed auto-reports height; /developers now loads and RUNS the real SDK (not a mockup); standalone /sdk-demo.html proves it embeds cross-page in a mock partner app
872e31a
Polish: demo cards use sans (match each app) not serif; 'in' -> 'going'; fix marquee glitch (2 copies, seamless loop); sun+ambient-music (SunnyMode) back in header; new-style OG image for LinkedIn/social preview
e3ffcdb
LOCK-IN: rollout flow (invite→signup→app) in /preview; real config-driven /embed widget (any partner); /developers SDK sandbox (live phone render, install snippet, try any partner); homepage: what/how/why-valuable section for partners, removed live consumer board + fake gatherings count, nav → Demos/For developers/Book a demo; hide chrome on new pages
583452b
Rip out the consumer face-scan signup: /verify no longer runs the camera flow (SelfieVerify), now a clean on-brand page pointing to the demo; /tonight CTAs repointed off /verify. Fits the OS-layer/embed model, users come in through partner apps.
591ec9d
Demo gallery becomes a fanned arc of app screens with staggered rise-in animation (genius.ai style), each clickable to that app's live demo
c0f7bcb
Refine top micro-copy (small, elegant); marquee = coming soon to every app + more companies; convert /start (For venues) to dark Fraunces glass
31c61fe
Homepage rebuilt to genius.ai structure: dark warm charcoal, giant Fraunces wordmark, live gathering cards fanned as the deck, micro-data top bar
1f2a62d
Fix Fraunces variable-font config (drop weight array, keep axes)
cdaa59d
Homepage v3: frosted GLASS panels over a candy-aurora gradient + real Fraunces serif display + Inter Tight (GlossGenius-class type pairing). Glass per Krishi.
bf8e472
Convert /verify onboarding to the modern system (white, bold sans, black CTAs) so Join free is consistent with the homepage
84c9f76
Propagate the modern product system across the flow: /connect, /home, /tonight now match the homepage (white, bold sans, black CTAs, product color). Consistent end to end.
d8d7abd
Homepage rebuilt in a modern product aesthetic: white, bold sans, black CTAs, product-forward, dark contrast panel (away from the AI-generic warm-serif look)
44436f5
Hero shows the live product panel (like GlossGenius), two-column, tilted device card
3da8448
Richer homepage: warm gradient hero, coral accent, own clean nav, bold type
86eb870
Member dashboard (proper multi-panel product surface) + all connectors work via demo-connect + two-column connect
- /home rebuilt as a real dashboard: top bar nav, stat tiles, matched gatherings panel, 'your people' (affinity matching), your world, perks. Killed the leftover wallet/card pills. - Every connector now works (demo-connect assigns representative affinities + lights up matching); real per-platform OAuth layers in as creds are set. No more 'coming soon'. - /connect: two-column desktop (title rail + connectors), no empty floating column.
5622b02
Homepage lands into the live board (real people going) + light nav (kill dark bar)
4885f43
Homepage + /verify onboarding rebuilt to the light system — dark theme gone from the whole member journey
942f814
Curated demo network seed: members + RSVPs so every board shows people going (demo-full)
c894f98
Meetups page + RSVP list rebuilt to the light design system (demo flow now cohesive end to end)
ac0cfd0
Home polish: single composed column, inviting rsvp state (no dead zeros), hide empty network card
d869711
Rebuild member home to the cohesive light design system (genius.ai bar)
Home now speaks the same refined light language as /connect and /tonight: your world (connected platforms), where souls are going (matched meetups + who's going), your real perks, the network this week. Same real data logic, world-class cohesive presentation, no dark glass patchwork.
Jul 22
Wednesday
4 changes
0c45ded
Kill fake perks, board fallback + who's-going, AI curation engine
- Member perks + check-in chips + tonight spotlight now gated to REAL paying rooms (subscriptionStatus active/trialing), removing junk test venues from member view. - /home board falls back to the network when the member's city is empty, and shows who's going (first names, from profiles). - AI curation engine: lib/network/curate.ts (Claude proposes real gatherings per city, prefers paying partner venues, dedupes) + /api/cron/curate-meetups + wired into the in-process scheduler (runs on boot + every 6h), so every active city's board fills itself and never sits empty.
81e1eaa
Clean onboarding: what is Soul -> verify -> make your profile -> in
- WaitlistEntry += bio (a line about you) + interests[] (what gets you out). For recognition IRL and matching to meetups, not a feed/clout profile. - SelfieVerify: intro reframed (what Soul is + the 3 steps); after face-verify, the form is now a real profile: name, city, email, a line about you, interest chips. - /api/waitlist stores bio + interests.
03ad3fe
Exclude test venue rows from public tonight board + home partner rooms
8377418
Member home: stop leaking seeded demo venues into 'where people have been'
A real member's home showed the 12 seeded demo/test venues in the crowd-activity feed because the query only excluded self_spot, not tier:demo. Now excludes demo venues and demo members from the member-facing activity.
Jul 21
Tuesday
2 changes
8e5a4b9
Wire the Venue OS agents to run autonomously (in-process scheduler)
- lib/venue/agents/scheduler.ts: startAgentScheduler() ticks on an interval, started from instrumentation.ts on boot. No external cron needed. - runDueAgents(): shared by the scheduler and /api/cron/agents. Runs live paid venues (drafts + autopilot sends) and demo venues (draft-only, never send). - executeRun short-circuits demo venues to a simulated send, so the sandbox console is fully interactive with zero real emails/SMS.
6343cd7
Venue OS agents, instant membership, and the real 30-day cutoff
Venue billing/access: - lib/venue/access.ts: single source of truth for paid access, derived from subscriptionStatus + trialEndsAt at read time (lapsed pilots self-close). - Enforce on the dashboard (reactivate paywall), data APIs, and door endpoints. - Kill the orphaned free-venue mint; gate the demo intelligence panel fix.
Jul 19
Sunday
4 changes
c29cb3c
Rebuild /home: member experience, not a dashboard
Members don't want stats. /home is now: where to go tonight (spotlight + top spots, links to the digest) + where people have been (the network's real crowd movement this week) + quick link to their card & perks. Dropped the presence stats / rank / chart dashboard.
dec6063
Digest: clear "what you get, free" member offering
Make the free membership value explicit: curated spots, perks at every room, members-only events + meetups, verified card / VIP everywhere.
b6c1812
Member Soul card + perks wallet (/card)
The membership made tangible: a premium verified Soul card + a wallet of every partner venue's live perk. Tap a perk -> flip to a "show this at the door" confirmation the member flashes to staff. No scanning, phone is the card. Apple Wallet pass scaffolds on later (needs the Pass Type cert).
befc9a9
The Digest: member discovery + venue spotlight surface (/digest)
The core member product: a clean "what NYC is on right now" digest (no scroll) with featured spotlight slots (the venue ad unit) + curated hot spots, seeded with real NYC rooms so it looks alive. Member magnet + ad unit in one.
Jul 18
Saturday
1 change
d9a3cba
Proper dashboard layout + proprietary Soul agent
- Rebuilt /spot dashboard from a skinny vertical column into a real two-column product layout: full-width stat row, wide main column (intelligence + agent + book), right rail (reward, chart, win-back, QR) - Soul agent: a tool-using agent (manual tool loop) that does deep analysis over the venue's REAL consolidated data — get_summary / list_guests / get_guest, never fabricates. Chat surface with suggested prompts. /api/venue/agent
Jul 17
Friday
6 changes
f3e131b
Square connector (env-gated): real OAuth + pull into the shared book
- lib/venue/square.ts: Square OAuth + customers/payments pull -> source records - /api/venue/connect/square (+ /callback): connect flow, merges via shared book - lib/venue/book.ts: one merge path for CSV import + connectors - dashboard shows "connect Square" + status banner when SQUARE creds are set
162cf1c
Tour: clean click-by-click (drop the murky full-screen dim + fake cursor)
Replaces the cinematic overlay (which read as janky) with a crisp gold highlight ring on the current piece + a compact caption you click through. Page stays fully bright and readable. No page dimming, no fake cursor, no autoplay.
67b9800
Tour: lock caption to cursor by waiting for async panel targets
Hold the per-step clock until the step's target element exists so the narration never runs ahead of the cursor/spotlight while the intelligence panel loads.
0e1acf4
Careers: real founding roles (partnerships, venue growth, city lead)
Replaces "we don't really hire" with actual openings built around the founding team we're hiring (Yuna-shaped partnerships/growth, BD, NYC city lead), in the new glass + oxblood system. Equity + commission framing.
ea6f2b4
Cinematic demo walkthrough: gliding cursor, camera zoom, autoplay
Upgrades DemoTour to an Arcade/Air-style product film on the live dashboard: a fake cursor glides to each part, the focused element punches in (scale), a fixed caption bar narrates, and it auto-advances with a progress bar. Ends handing off to the fully interactive product.
c80c4b5
Fix /demo: whitelist it in middleware (was bouncing to homepage)
The middleware redirects any non-public path to /, and /demo was never added, so every "explore the live demo" click landed on the homepage instead of the sandbox dashboard.
Jul 16
Thursday
6 changes
ff3906f
Site-wide: ambient glow + glass on every page, softer demo tour
- .soul-ambient is now a fixed warm gold+oxblood background; applied to all 34 dark page roots so nothing is flat brown - standard cards -> soul-glass across pages/components - DemoTour scrim softened so the sandbox never reads blank
0b711b7
Oxblood second accent + cream sections + glass tokens
- globals.css: .soul-glass-oxblood + .soul-cream design tokens - intelligence panel actions + dashboard win-back -> oxblood (urgency reads right in wine); gold stays primary - for-business "blind spot" -> a cream section to break the dark
f07a847
Guided demo walkthrough + per-visitor concierge
- DemoTour: auto-launching spotlight walkthrough on the public sandbox (welcome -> readout -> metrics -> tastemakers -> actions -> book -> CTA) - Concierge is now stateless + per-visitor: new /api/concierge holds the chat only in the browser, writes nothing. Fixes shared demo-thread leak where anonymous visitors saw each other's messages.
e016771
Dark glass UI: frosted panels + warm ambient glow (kill the flat brown)
- globals.css: .soul-glass / .soul-glass-gold / .soul-glass-soft (frosted, blur, bright top edge, depth) + .soul-ambient warm radial glow backdrop - venue dashboard: ambient glow + all cards -> glass; intelligence panel + demo banner -> gold glass; panel tiles -> soft glass - CLAUDE.md: venue intelligence + sandbox + desktop-horizontal + glass notes
a58154e
Public sandbox: try the venue product free, pay to go to production
- Demo venues are now a public, tokenless read-only sandbox at /spot/[code] (and /demo -> the-nines): full dashboard + live intelligence panel, sample data, with a persistent "start free for 30 days" CTA into production - Editing/billing/wall widgets hidden in demo mode; importer becomes a teaser - /api/venue/intelligence serves demo venues without a token - "explore a live demo" links added to /start and /for-business
03f6352
Desktop layouts go horizontal: concierge magazine grid + panel multi-column
- /concierge: full-width max-w-6xl, per-category title rail + 2-col spot grid (was a skinny max-w-3xl vertical column) - VenueIntelligence: insights 2-col, actions 3-col, tastemakers 2-col on desktop
Jul 15
Wednesday
8 changes
ea829a6
try-it venue close: drop the confusing filing-cabinet metaphor, plain recap of the loop
7aca47f
wall self-contained: no outbound IG links (first name only), share copy platform-agnostic. soul is its own social, never feeds other platforms
6a3e4b7
venue wall = shareable IRL broadcast channel
- /wall/[code] OG image + metadata: posting the link to IG/iMessage unfurls with the room name + 'who's been here' - dashboard WallShare module: live wall link, one-tap copy, 'put it in your ig bio', + members-brought-to-soul attribution count (joinedVia spot:code)
bb32c60
try-it demo: venue flow now walks the full value (import book -> live tonight -> recognition at door -> auto win-back -> network new customers -> the close). member VIP-everywhere. subhead for flow.
c8fc309
homepage: try-it before the wall; wall section now explains its value (feed you can't fake, earned by showing up)
389a5a8
venue CSV import: fill the dashboard on day one from their existing list
- VenueCustomer model (imported contacts, unified with soul members by email) - /api/venue/import: token-gated CSV upsert (name/email/city/spend/visits/last) - VenueImport: client CSV parse + auto column-map + upload - dashboard CRM 'your book' = imported customers + verified souls, soul-badged
dda7edc
start page: reframe to 'your room as a members club' + universal-VIP network
9d615b0
middleware: allow /start (was bouncing the venue pilot page to home)
Jul 13
Monday
6 changes
de35add
homepage wall: 6 static sample polaroids of real NYC rooms, no live photos
2a51b4e
homepage wall: gradients only, never real face photos on the public wall
69857b1
homepage wall: one look per unique room, not the same spot repeated
5423555
Homepage: strip to hard-hitting headers, demo does the explaining
- wedge: cut the 3 columns + long sub -> headline + one line - the wall: cut the 2 paragraphs + 3-step process -> headline + one line (the try-it demo shows the flow) - TryIt: equal-width toggle buttons (pill aligns); brand example is a CLOTHING brand ('wear their new jacket out, ') with a clear 'brands pay real people to be seen in it' line (AESOP/'wear it out' made no sense)
a9b42a4
Homepage: interactive 'try it' replaces the wordy previews
- TryIt: tap-through phone-frame demo of both flows. member: apply -> you're in -> the soul line + perk -> snap your fit -> on the wall -> brand wants you $50 -> +$50 paid. venue: your room tonight (tiles) -> top spenders -> run a soul night. member/venue toggle, minimal words, CTAs at the bottom. - swapped HomeDoors out for TryIt on the homepage (leaner, interactive)
5e33ae8
Fix 'show your look' + self-check-in camera: attach stream via useEffect once the <video> mounts (was setting srcObject before the element rendered); relax constraints to ideal
Jul 10
Friday
4 changes
5b12642
Wall section: add the 3-step process (show up + check in -> snap your look -> on the room's wall with name/room/time); clearer 'your fit here' polaroid placeholder
49fe2d3
Homepage: align all sections to one left edge (max-w-6xl mx-auto); polaroids show establishment + accurate check-in time
- HomeDifference (wall) + HomePolaroids now share HomeIntro's container so left edges line up (was misaligned/odd) - each polaroid caption: name + venue + the real time they were there (from createdAt), lowercased. placeholder shows 'the next room · tonight'
17aa9bd
Fit check + polaroid wall live: snap your look at check-in -> onto the room wall + a polaroid wall on the homepage under the story
- CheckInCard: after check-in, 'snap your look' opens the camera, captures a fit check, posts to /api/spot/look (attaches to the verified check-in -> the room wall). states: check in -> snap -> on the wall. - HomePolaroids: real recent fit checks pinned up as polaroids under the wall story; inviting 'you?' placeholder until looks exist
e7cf36f
Homepage: lean it out + tell the wall story
- HomeIntro trimmed to one-line columns (was dense paragraphs) - replaced the heavy check-in-vs-post grid with 'the wall' story: the framed faces by the door of a great room were always the real status; soul makes it the whole city, unfakeable, the only feed that ever meant anything
Jul 9
Thursday
8 changes
5d6948d
Fix for-you/for-business toggle centering (fixed-height flex-center + optical nudge, drop leading-none); checkin returns checkInId
57bd909
Formalize the marketplace on the site: /how-it-works (all 3 sides) + refreshed /brands + footer links
- new /how-it-works: for people / for venues / for brands, each with the real step-by-step flow, positioned as verified real humans (open door), not an exclusive club - /brands refreshed: what brands actually pay for (real people in real rooms + proof + authentic content from the room), campaign flow includes the check-in as proof; dropped gold eyebrows - footer now links How it works + For brands; middleware + nav dark-route updated
ab293e9
Homepage: add 'you check in, you do not post' differentiation (the feed vs the room)
- answers the crux: a check-in is not a social post. verified not fakeable, seen by the room/venue/brands not broadcast to strangers, and it pays you. formalizes how soul differs from going places and posting online.
5c1f1b6
Manifesto: add 'this is already happening' proof section with verified linked case studies (Polaroid, Pinterest, Erewhon, Liquid Death, experiential $128B) + gen-z stats
15c1e0c
Homepage intro: hit harder on the wedge (the game changed / presence is the currency / the new social)
- follower game is over; next gen of culture + brands built on who is real and who is there; soul is the marketplace for real-world presence; we are not another app, we are the category (successor to the feed for the real world)
7adb440
Homepage intro: reframe as the new-social wedge (new status / new economy / new network), drop the manifesto link
- was reading like a nightlife members club; now leads with the category: 20 years of buyable/fakeable online status is ending, soul is what comes next, no one owns it yet. columns = a new status / a new economy / a new network.
901945d
Homepage: add concise manifesto-in-brief (what/why/how) right after the hero, left-aligned edge-to-edge
- HomeIntro: 'the feed is dying. real life is the new status.' + three left-to-right columns (what it is / why now / how it works) + link to full manifesto. first thing you read, kept short.
53cd539
Manifesto: underline the two engines (known + paid) + link it from the footer
- section iv 'for people': social media did two things, made you known and let you cash it in; presence does both for real life. known by the rooms you walk into, paid to be there not to perform. - added Manifesto link to the footer (was an orphaned page, unreachable)
Jul 8
Wednesday
8 changes
7f37f8c
Center the for you / for business toggle text (fell font sat high; asymmetric padding + leading-none)
f0d7cd5
Site: add the venue 'you don't know your own room' differentiation (blind-spot framing, no competitor names)
- for-business + homepage business tab: 'you don't actually know your own room' -> who walked in, who your best customers are, what they spent. offline has always been a blind spot, soul is the first time you see it.
6b8b1e4
Reframe venue copy: honor the member, decal optional (works for prestige anchors)
- 'honor the badge' -> 'honor the members'; 'put the soul badge on your door' -> 'recognize soul members and honor the perk' - decal now framed as optional (for rooms that want the signal), so the model fits ultra-prestige anchors that won't display signage - FAQ + outcomes updated across for-business, HomeDoors, BusinessFAQ
50b8dcc
Simplify 3s capture: keep countdown, drop rotating cues -> single 'give us a look' prompt
6545418
Concierge close copy: rewrite the riddle-ish 'this one is ours' line to say plainly that the public list is the shareable part and members get the rest
4c693e1
Close open-redirect in /api/member/enter (reject protocol-relative to= targets)
a2d02aa
Concierge live chat bubble + NYC-now availability marker
- ConciergeBubble: floating chat on /concierge, reuses /api/thread (knows live meetups). ask where soul is tonight, get a real answer - concierge hero shows 'new york, now' so the NYC-only, all-curated positioning is explicit
3829579
For Business: frame as a foot-traffic growth engine (spotlight + regulars + soul nights), not just running events
Jul 7
Tuesday
16 changes
63e9457
Concierge: each spot links out to find it on the map
633079a
Add the concierge: public editorial city guide (curated NYC spots, Service95-style)
0c73d7f
/for-business page: pricing + FAQ + mailto apply, scrap the separate /business screen
b0ae4f3
Presence chart counts visits, not nights (72 nights in 8 weeks was impossible)
b6172df
Coherent demo data (12 venues, current/legacy split, robust 'today') + self-contained For Business (pricing/FAQ/apply, no separate screen)
- seed: 12 venues (7 current + 5 legacy so total rooms > rooms this month); today-loop skips legacy; more check-ins. - venueCrm 'in the room today' anchored to latest check-in (never 0 after UTC midnight). - HomeDoors For Business: $250/mo flat + FAQ + 'become a soul spot' mailto, dropped /business + see-the-full-story. - For You: apply CTA kept, dropped extra screen link. Nav 'become a soul spot' -> mailto.
ead0ac8
Make the venue's job clear: put the Soul badge on your door, we do the rest
75cf600
Drop the face-display 'wall' from thesis copy; lead with recognition + presence
- Hero + manifesto: 'you get recognized in the best rooms' instead of 'land on the wall'. - Member dashboard rooms list: drop 'on the wall'. Physical QR scan mark and the check-in graph (brand ROI) unchanged.
7533725
Native For You member preview (no more cut-off iframe) + remove redundant venue/creator flows
- HomeDoors For You: native MemberPreview at natural height, matches the business CRM card, no iframe/cut-off. - Removed 'for venues' from the hero; request access now goes to /verify (the real apply flow). - Removed For Business / For Brands / For Creators from the footer.
9f0973a
Add darkreader-lock + color-scheme meta so browser dark-mode stops repainting the dark pages into a band
afa1e67
Kill gold eyebrow titles, non-clickable demos, For You shows in-state, no-zero seed, back arrow
- Removed all gold uppercase eyebrow/kicker labels site-wide. - Homepage demos are now view-only (iframe/CRM pointer-events-none); /home embed uses ?preview=1 to force the 'you're in' member state (no waitlist). - seed-demo guarantees 'in the room today' per venue so no stat reads 0. - Back-to-home arrow on the apply screen.
63b6e86
Declare color-scheme: dark so browser auto-dark-mode stops painting a band on the near-black pages
00334d8
Fix homepage product preview (allow same-origin framing) + remove for-you/for-business nav links
- next.config: X-Frame-Options SAMEORIGIN + CSP frame-ancestors 'self' so the homepage can embed our own /home preview (was DENY, showed 'refused to connect'). Other sites still can't frame us. - SiteNav: drop the for you / for business top-nav links (the homepage pill already covers both).
bdb1da0
Fix enter redirect host (real domain not localhost) + welcoming new-member state + logged-out demo fallback
- /api/member/enter: build redirect from x-forwarded-host so it lands on the real domain, not localhost:3000. - RoomsList / PresenceChart: warm empty state for a brand-new member (0 rooms). - /api/thread + /api/referral: fall back to demo member when logged out, so the concierge and invite look alive on the homepage embed.
5fa90dc
Self-serve fast-track: invited applicant auto-accepts into their dashboard
- /api/waitlist: a verified applicant (passed face gate) arriving on a valid invite (founding code or a member's referral code) is accepted on the spot, gets a memberNumber, no manual review. - /api/member/enter: sets the soul_member cookie via browser redirect and lands them on /home (cookie sticks on navigation, unlike a fetch response). - SelfieVerify: on accepted, navigates to /api/member/enter -> /home. Public without an invite still goes pending for hand review.
912b827
Homepage For You / For Business pill toggle + public product previews
- HomeDoors: centered segmented toggle on the homepage, swaps inline between the souls experience (live /home preview) and the done-for-you business story (read-only the-nines CRM preview). No navigation. - /for-you and /for-business deep-dive pages, public. - /creators now redirects to /for-you (creators folded into souls). - SiteNav: two doors (for you / for business).
7b5f760
Seed multiple NYC rooms (presence variety) + hide site nav on /home
Jul 6
Monday
3 changes
7b7433e
Face scan: self-hosted Claude vision matching (drop AWS Rekognition)
Enrollment is now implicit (a member's apply selfie IS their enrolled face); scan pulls accepted members' selfies and asks Claude which one matches. Removes the AWS creds blocker: works with the ANTHROPIC_API_KEY the app already has. Retry-wrapped, cached, threshold-gated.
dbeaf18
Venue scan-to-enter: real face recognition (AWS Rekognition)
Face IS the key at the wall (was cookie-only). Provider isolated in lib/soul-id/face.ts; enroll on member accept, search at /api/spot/scan, bootstrap route backfills existing members. Scan UI gated on faceEnabled so it degrades cleanly to apply-only until REKOGNITION_* creds are set.
8f25a06
Add Soul manifesto page (the presence economy thesis)
Long-form manifesto at /manifesto in the site's warm-dark editorial style: the feed is dying, AI floods online with the fake, the real world becomes the only trustworthy signal, and Soul pioneers the presence economy.
Jul 5
Sunday
2 changes
efb53a6
Hero: 'we are the new social.' + concrete sub
Swap the 'who's out. who's been where.' hook for the thesis line up front. Sub now explains it (no feed, no posting, land on the wall) without repeating 'social'.
d3fa0f2
Fix duplicate headline: wall section is now 'the room remembers you'
Was repeating the hero's 'who's out. who's been where.' Wall section now has its own headline describing what the wall does.
Jul 4
Saturday
6 changes
dfbec80
Clarify the check-in: scan the mark + snap your look inside the room
The scan is a photo you take INSIDE the venue, in the moment, not a street selfie. That in-room photo is the check-in and lands you on the wall.
22845a8
Explain the new-social mechanic under the wall
Add the actual process: the check-in is the post, the wall is the feed, presence is the profile. Makes it clear the wall is a mechanic, not a mood board.
f96b338
Polaroid wall: real, current NYC spots across the whole city
Swap placeholders for verified 2026 hot spots spanning bars, clubs, and the hardest-reservation restaurants across neighborhoods (Carbone, Polo Bar, Superbueno, Le Dive, Coqodaq, Or'esh, Jean's, Death + Co, Torrisi, Schmuck, Little Sister, Attaboy). Times span the night, dinner to 2am.
78a8980
Align polaroid wall to the homepage grid (max-w-7xl, px-8)
Was max-w-6xl/px-6 while every other section is max-w-7xl/px-8, so its left edge and width didn't line up. Now consistent with the hero and sections.
c23d57f
Drop the hero eyebrow for a cleaner, more confident hero
The '500 founding members' label competed with the headline. Scarcity still lives in the apply flow + 'invite-only' in the sub. Section labels kept for wayfinding.
4ae2305
Lead homepage with the social wall, not the club utility
Hero reframed to 'who's out. who's been where.' + a homepage polaroid wall (same aesthetic as the venue walls). Presence/social concept up front; access/no-line utility demoted. Polaroids are atmospheric until real member check-ins (or real photos) populate them.
Jul 2
Thursday
1 change
812d3d9
Brand: lock the trust pillar (real, accountable, no bad apples)
The people make the room. Foreground the always-true safety/quality layer under the aspirational positioning: - how-it-works 01: everyone verified and accountable, no bots, no anonymity, no bad apples. - the shift: 'the people make the room... a room you can actually trust.' - manifesto adds 'not anonymous.' - venues perk 01: the right crowd, vetted, verified, no bad apples. Keeps the membership headline and aesthetic; safety stays the foundation, never the headline.
Jun 29
Monday
6 changes
921a239
Remove em dash from comment
6612c0b
Curation stance: hand-selected, not followers; swap IG for a vouch
- Drop IG-as-clout from onboarding; add a 'who vouches for you' field (curation, not follower count). New WaitlistEntry.vouch field, stored via /api/waitlist, shown in the admin review queue. - Apply flow leads with the stance: hand-selected, no followers, the most interesting people in the city, the team reviews every applicant. - Homepage carries the stance: how-it-works '01 get accepted' is now hand-picked + team-decided; manifesto adds 'not a follower count.'
aa34133
Onboarding: simple 3s live video, no head-turn, retry-hardened
- Strip the turn-left/turn-right challenge. Just record a 3s video and prove you're real (passive liveness on the clip). - Reframe copy off 'verify/scan' to 'live video'. - Add retry (overload/429/5xx) to the Vision liveness call so a transient Anthropic 529 can't block a real applicant mid-apply.
1e41efb
Whitelist /explore in middleware so it doesn't redirect home
3565367
Add /explore Soul Map: octane-style WebGL NYC blueprint
Interactive three.js city: instanced NYC blueprint grid + custom GLSL shader (glow/scanline/grain/FBM), scroll/pinch zoom, click-to-reveal rooms, section panels that rise by zoom band. Vanilla three@0.184, dynamic ssr:false, with a static CSS blueprint fallback for low-power/no-webgl/reduced-motion and crawlable SEO copy. Nav not wired yet; lives at /explore standalone.
0de2a74
Reposition homepage: membership, not fast-pass
Lead with what you ARE part of, not what you skip. Hero is now 'the city's best rooms know you' + 'an invite-only membership to the best rooms in your city'. How-it-works follows the real incentive order: accepted -> rooms know you -> see who's out -> belong. Line-skip demoted to a supporting detail. Metadata updated to match.
Jun 27
Saturday
13 changes
0d6a489
Center pill CTAs with true flex centering
Replace the asymmetric-padding hack on rounded-full pill buttons with inline-flex items-center + leading-none. Consistent, font-metric-proof vertical centering across the marketing tabs.
84f03c1
Roll spec-list layout to creators + venues
Same tight title/desc divider list as brands. Replaces the floating 2x2 and 3-col grids across all the marketing tabs for a consistent, dense, intentional look.
888283a
Brands: replace floating 2x2 grids with tight spec list
The grids of one-line items read as scattered fragments. A bordered title/desc list is dense and intentional, the right home for lean copy.
1e70f46
Remove grain, rebalance tab spacing for lean copy
- Pulled the film grain: at 5% it lifted the dark browns into a hazy gray and killed the rich color. Back to the true #14100c. - Tightened the vertical rhythm on venues/brands/creators. The big section gaps were sized for the old long paragraphs; with one-line copy they left hollow voids. Cut mb-28/mb-40 down to mb-16/mb-20.
caeb5b7
Same lean diet on brands + creators
One short line per perk/step. Cuts the wall of text to match venues.
b92a97c
Cut the venues page way down
Descriptions stripped to one short line per perk/step, killed the redundant subline. Same info, a fraction of the words.
0f8282e
Revert "Prototype Space Grotesk on wordmark + hero eyebrow"
This reverts commit a44c2793a2af83a4688b9549e4ce04d2b8c8d97d.
a44c279
Prototype Space Grotesk on wordmark + hero eyebrow
Sharp condensed grotesk (Strangers-style) on the label moments: nav wordmark (now uppercase tracked) and the homepage eyebrow. Headlines and body stay FELL serif, keeping the high/low tension. Reversible.
537ab45
Add subtle film grain overlay for tactile texture
Fixed, pointer-events-none noise layer at 5% opacity over the whole site. Strangers-style tactility, makes the dark surfaces feel like an object, not flat software. Reversible (one block in globals.css).
48b6c3b
Fix signup banding + add page fade transitions
- Body background was cream (#f8f6f3) from legacy globals.css, fighting the dark layout. In Tailwind v4 the unlayered rule won, so a cream body peeked behind dark pages and showed as banding on /verify. Body is now dark-first (#14100c); light pages paint their own bg on top. - app/template.tsx fades each page in on navigation (0.35s), so moving between tabs is a smooth fade instead of a hard cut.
f7ec200
Fix muddled 'name disclosed to nobody' copy
The anonymous-prestige idea is a PR stance (no public member list), not a literal member benefit. Reworked into the true point: no performing, known by presence, Soul never becomes public content.
bd24fe8
Elite copy pass + clear venue-scan onboarding
- Homepage tightened, less salesy, and now leads both hooks: skip the line AND see who's out tonight (woven into hero, the shift, steps). - Venue QR landing (/s/[code]) for non-members now says plainly what Soul is, leads with the fast-pass bait, and routes to the apply flow instead of instant-joining (consistent with invite-only). Member check-in, perk, and wall unchanged. - Venues page + FAQ de-hyped: dropped "less than one slow night" and risk-free/sales reassurance framing; sharpened the sticky-regulars point (be the fast pass, walk-ins become regulars).
f16ff26
Membership model: apply, vet, accept, badge
Reframe the whole site around invite-only membership where the badge skips the line. 500 founding members, NYC first.
Jun 25
Thursday
3 changes
a30353e
Creators: replace zigzag with centered header + two-column body
Zigzag read confusingly (giant heading ate a column, sides flipped). Now each section is a centered header with content filling both left and right columns beneath it, same shape throughout, full width.
89c48e8
Creators page: zigzag layout + the wall is your only feed
Rebuild the body as alternating left/right editorial rows (heading one side, body the other, flipping each section) so it uses the full width instead of a narrow column. New copy: the curiosity/recognition driver (you always want to know who was really in the room, some faces you will recognize) and the core reframe, the only way you post is by showing up, your face shows up only on the soul walls of the spots you walked into, not instagram or tiktok.
1221fc7
Reframe brands page around the recommendation engine
Lead with the real-room word-of-mouth thesis: a paid post has no skin in the game, a recommendation in a real room is someone spending their own credibility for free, which is the only marketing people still trust. Soul is the company that engineers those rooms at scale. New hero ('where did you get that?'), a thesis section, and a sticky-customer mechanic.
Jun 24
Wednesday
8 changes
451bb0e
Redesign venue wall as a wall of polaroids
Each check-in look is now a polaroid: warm-white frame, a strip of tape, slight per-slot rotation, and the member's name/handle handwritten on the frame in Caveat. Handles still link to instagram. This is the digital restaurant-wall-of-faces, made to actually feel like a corkboard of real people.
0a19b70
Let members add/edit their handle from the wallet
Closes the gap: handles were only capturable at join. Now there's an 'your instagram' editor in the wallet (POST /api/member/update, authed by the member token). Existing members and anyone who skipped it at join can set or change their handle anytime; it updates what shows on the wall.
e7b04c8
Identity on the wall: opt-in first name + IG handle (the named restaurant wall)
A restaurant's wall of faces works because you know who they are. Anonymity killed that. Now identity is opt-in: - igHandle added to the member; join flows (/verify, /s/[code]) take an optional '@instagram' that shows on the wall - wall shows each look with the member's @handle (links to IG) or first name; copy changed from 'we never say who' to 'real people, real rooms' - creators copy fixed to match (your look, your first name, your handle)
053fc15
Creators page: make the check-in -> wall -> proof loop tangible
Was too abstract ('the check-in is the social'). Now it's concrete: - 'the wall of faces, but the whole city': the restaurant wall-of-regulars analogy, check in and you land on the live verified wall, names never said - 'how brands pay you for it': spells out the money mechanic, brand runs a campaign, you wear it out, your check-in (+ look at the door) is the proof you showed up in it, verified appearances not a screenshot to trust - steps rewritten as the clear loop: verify -> check in/land on wall -> brands pay -> the check-in is the proof
f8e781b
Pills: back off 1px (16/12), text was reading slightly low at 17/11
90c80dd
Pill text dead-center: asymmetric padding (17/11) shifts IM Fell to optical center
line-height:1 alone left text high because IM Fell's baseline sits low. Swept the CTA pills to pt-[17px] pb-[11px] (buttons are px-6/7/8, inputs px-5 so they're untouched), which drops the text body to dead center. Measured against the center line.
a335de7
Re-center copy on verified realness, not 'pays you to show up'
Our real separation is being the offline network of verified humans in a world of bots and AI, not a get-paid promise. Pulled 'soul pays you to show up' out of the consumer surfaces (TheShift, HowItWorks step 4, what-is-soul modal, about) and re-centered them on realness/verification. Kept 'paid to show up' on /creators where it is literally true.
12f03ef
Pill buttons: center text dead-center site-wide
IM Fell sits high in a default line box, so pill text read above center everywhere. One global rule sets line-height:1 on rounded links/buttons, dropping the line box to the glyphs so text centers dead-center across the whole site. Scoped to a/button so cards and glass bars are untouched.
Jun 23
Tuesday
6 changes
473ec54
Homepage nav: solid lean brown header (sticky), no more overlap on scroll
The homepage nav was fixed+transparent, so scrolled content slid under it and overlapped the text. Now it's the same solid sticky #14100c bar as the other pages (leaner padding), content scrolls cleanly behind it.
6dcd242
Branded printable badge (not a naked QR)
- QR now high error-correction so a center logo is safe - /spot/[code]/badge: a printable branded badge -- Soul mark, 'where the real ones are', QR with the Soul logo in the center, venue name, perk, 'scan to enter'. Print button (hidden on print) - Dashboard 'your mark' links to the printable badge
9ff6235
Member weekly signal pipeline (Kit)
/api/cron/member-signal computes each member's city signal (active soul spots + perks this week) and pushes it to Kit as the 'signal' field. A weekly broadcast to the Soul Members tag personalizes via {{subscriber.signal}}. Mirrors the venue-digest pattern. Plus the wallet section redesign.
6e7e91d
Wallet redesign: every section earns its place
- Membership card now shows EARNED status (new soul -> out there -> a regular -> known in the city), presence made visible as the currency - Presence ledger gets a 'only goes up by showing up' line - New perks section (what's waiting, why you go out) - Order: card -> ledger -> brand deals -> perks -> where you've been -> wallet link (utility moved to the bottom)
80d6fc2
Wallet: permanent bookmarkable link (any device) + offers-by-email note
- /wallet works via ?key=<memberToken> (bookmark, cross-device) OR the cookie - Wallet shows the member's permanent wallet link to copy/bookmark - Brand-deals note: offers arrive by email and land in the wallet
4485e3b
Mirror the captured look to match the selfie preview (was dropping flipped on the wall)
Jun 22
Monday
32 changes
a117536
Solid dark nav (no grey haze) + clean mobile pills
- Dark non-home nav is now solid #14100c (no /85 opacity, no blur, no border) so it never renders as a grey bar - Pills: rounded-3xl on mobile (clean multi-line card) -> rounded-full one-line on desktop, no more stretched stadium on phones
e63b1e2
Add navigation out of the nav-hidden flows
The verify 'you are in' screen, the wallet, and the venue wall had no way back (global nav is hidden on these focused flows). Added: - verify done: 'see your wallet' + 'back to soul' - wallet: 'soul' home link (both member and non-member states) - wall: 'the soul company' home link + a 'join soul free' CTA
a0a02d7
Hero pills sit on one line on desktop
Break the glass pills out of the centered max-w-2xl column so they size to their text and use lg:whitespace-nowrap, no more two-line stacked pills on /business, /brands, /creators. Still wraps gracefully on mobile.
150e6a7
spot/join returns checkInId so new joiners can add their look
e635700
Redirect legacy /blog/the-brooch to the new post
Guarantees the old brooch URL never serves dead-model content regardless of cache, redirecting it to /blog/we-are-the-new-social.
0e29a37
Scrub dead-model content from the blog
All three posts referenced the dead brooch/journal/canvas/world model. - 'Why We Left the Screen': rewrote the ending to the offline-network / check-in model (kept the strong opening) - Replaced the all-hardware 'The Brooch' post with 'We Are The New Social' (presence economy) - 'Fifty Means Something': brooch line -> checked in beside you
4bb75b4
Allowlist new public routes in prelaunch gate
/brands, /creators, /wallet, and /wall/ were being redirected home by the middleware gate. The venue wall (centerpiece) and the new audience pages now resolve instead of bouncing to the homepage.
a26bb64
Kill stale beacon/wearable copy in about, terms, privacy
- About rewritten to the current model (offline network of verified humans, presence economy, check-in), founder bio updated, join/business CTAs added - Terms + Privacy: device/wearable language replaced with paid membership + brand features + check-in/presence data
318521a
Three-sided model on the site: /brands + /creators, member wallet, hide nav on flows
- /brands: brand pitch (product on real people, influencer-vs-soul compare, how it works, launch CTA) - /creators: 'get paid to show up', presence-not-followers, how it works - /wallet: member's private membership wallet (card, presence ledger, brand deals). Not a feed. - Footer surfaces For Business/Brands/Creators; both new pages in dark routes - Hide global nav on focused flows (/verify /s/ /spot/ /wall/ /wallet) so the mobile header stops fighting the camera/check-in screens
9cf1865
Venue apply handoff + dark dashboard + mobile nav fix
- BusinessForm: success screen with QR (printable/downloadable), wall link, dashboard link instead of a bare redirect - /spot/[code] dashboard + RewardEditor converted to dark; QR on a white tile so it stays scannable; added a 'your wall' link - Mobile nav: shorter wordmark, tighter gaps, hide sun + 'what is soul?' on phones, keep contact/IG/join-free. Fixes the scrunched grey header on mobile
4782309
Build venue wall + look capture at check-in
- /wall/[code]: public anonymous social-proof wall (here now / this week + grid of opted-in looks). Mobile-first, dark. The digital photo wall. - /api/spot/look: member captures their look at check-in, stored to CheckIn.lookKey, flows outward to the wall (never a personal feed) - /api/spot/checkin returns checkInId - SpotCheckin rewritten: dark, mobile-first, look capture flow, wall link
2cfd4fd
Reframe homepage clarity + differentiation; extend CheckIn schema
Site: - 'how it works' section: the 4-step mechanic (join, go out, check in, presence pays) so the model is clear as day - 'what it isn't' section: explicit separation from feeds, profiles, influencer marketing, reviews, apps -> 'just the real world, made to count'
9ac180f
Wordmark 'the soul company, inc.' pushed left + fix modal buffering
- Wordmark reads 'the soul company, inc.' and nav padding reduced so it sits further left - Modal: drop backdrop-blur (it was re-blurring the live hero video every frame, causing the buffering/stutter). Use a near-opaque dark overlay and a solid card instead. Same look, no jank.
133aa49
Kill cream bleed: dark body + dark loading fallback
Root <body> was still bg-[#f8f6f3], bleeding cream on overscroll and pre-hydration flash even though page content is dark. Set body and the Suspense loading fallback to bg-[#14100c].
f3017fd
Dark nav on content pages + purge stale meta tagline
- Add /about /careers /privacy /terms /blog to DARK_ROUTES so the nav is dark on them (was rendering a cream bar on the now-dark pages) - Replace 'human-only platform' in JSON-LD descriptions with current positioning ('offline network of verified humans')
45e8787
Homepage: 'social starts when you walk in' shift section + presence framing in what-is-soul
- New TheShift section below the hero formalizing the presence economy: social begins at check-in, presence is the currency, show up not post - Weave the same framing into the what-is-soul modal
9d12073
Hero: brown top-fade so header blends like the footer
Mirror the bottom gradient at the top so the transparent nav melts into the warm dark, matching how the footer blends into the video.
5431458
Dark palette for about, careers, privacy, terms, blog
Sweep the remaining footer-linked pages to the warm dark palette so the whole reachable site is consistent. Colors only, no copy changes.
8922ae8
Fix createPortal missing container arg
0ce0fc5
Fix modal positioning (portal), floating nav, wordmark, drop marker
- GlassModal renders via portal to body, escaping the nav's backdrop-blur containing block that broke position:fixed (modal overlapped content) - Homepage nav floats (fixed) over the hero so no cream bar shows through - Brand is now 'the soul company' in IM Fell, not the logo image - Removed the no.001 edition marker
e8e5cb4
Homepage: editorial film-poster hero (anti-222 layout)
Left-aligned stacked headline 'the new social is a room, not a feed.', full-bleed watercolor with cinematic left scrim, restrained text-link CTAs (not center pills), 'no.001' printed-edition marker. Different skeleton from the centered 222 layout.
0700129
Business: coherent flat $250 pricing, kill per-head contradiction
Pricing now says one thing everywhere: $250/mo flat. Reframes flat as the advantage vs per-head apps (one price no matter how many it sends).
fd08c72
Business: rent-vs-own comparison + objection-handling FAQ
- 'you are not buying ads, you are buying regulars' two-column compare (ads/marketing vs soul: pay-for, cost, who shows, proof, repeats) - '/before we get on a call' FAQ accordion handling every venue objection (cost, change how I operate, how members find me, what I get, vs promo groups, verification, risk). Turns /business into our partner site.
383b0b7
Nav: rounded Soul mark, glass modal cards, drop tabs
- Replace text brand with rounded Soul logo (favicon) top-left - Drop For Humans/For Business/join-free tabs on homepage (center has CTAs) - Add 222-style glass pop-up modals: 'what is soul?' (explainer) and 'contact' (email + become a soul spot), with backdrop blur + fade/scale - Nav right cluster: sun, what is soul?, contact, Instagram
d5be1c5
Verify flow dark + fix nav on all dark routes
- Convert SelfieVerify (/verify camera + join flow) to warm dark: dark inputs, cream buttons, cream/gold text hierarchy - SiteNav now dark on every dark route (/, /humans, /business, /verify), fixing the cream nav bar that was showing on /humans and /business
d549f3f
Homepage polish: transparent nav, video back, minimal footer
- Nav fully transparent on homepage (no grey bar, seamless) - Watercolor video restored behind hero with brown wash overlay - Footer stripped: drop triple company name, Delaware C Corp line, outdated 'human-only platform'. Warm bg to match page. Tagline now 'the offline network of verified humans.'
ca838a7
Business: clean minimal hero, glass pills
Replace two dense paragraphs with a punchy header (fill the room with the real ones), one glass bar, brown/cream glass CTA pills, and a one-line price hook. Matches the homepage style.
12acdd3
Homepage: single-screen 222-style hero
Strip homepage to one screen: big header 'we are the new social', one glass bar explaining the offline migration, and brown/cream glass sign-up pills (join free / for business). Drop the manifesto, explainer, and mystery sections from the page (components kept in repo).
d16ec8a
Homepage: reorder + add 'what we do' explainer
Order is now hero -> napkin manifesto -> what-we-are explainer -> mystery payoff. New WhatWeAre section: flowy 222-style copy that states what Soul is and the offline-discovery wedge (we grow out there, never online, a category of our own).
57cf811
Dark cream-and-brown across homepage, humans, business
- Mystery band: rewrite copy, tighten spacing, keep cream/gold/taupe - Warm homepage nav so no grey bar - Convert /humans and /business to dark palette (cards, forms, buttons)
fc389b5
Homepage: warm dark palette site-wide, drop mystery kicker
Convert homepage (hero, letter, footer, nav) to the warm dark #14100c + cream scheme. Remove the 'a quiet rule' label from the mystery band. Keep all staggered fade-up animations.
b2a3c2a
Homepage: anonymous-prestige mystery band
Dark band between hero and letter. Recognizable members, names never disclosed. Staggered fade-up reveal.
Jun 18
Thursday
6 changes
3e249bb
swsh-level venue CRM: analytics, win-back, CSV export
- Return rate + avg visits per soul (loyalty), 8-week check-in trend chart, busiest night + peak time. - Win-back list: regulars (2+ visits) not seen in 14+ days. - CSV export of the full member list (name, email, city, visits, first/last seen) so the venue owns their CRM.
bab518e
Venue CRM dashboard: see exactly who came
- WaitlistEntry.name added; badge check-in (SpotCheckin) and /verify now capture name, stored on the member and passed to Kit as first name. - /spot/[code] rebuilt into a real CRM: souls this month, unique souls, regulars, new this week, plus a list of who came (name, city, visits, last seen, regular tag). Empty state when no check-ins. Auth + QR kept.
265b547
Start music on 'join free', drop eyebrow headers, fix gathering copy
- SunnyMode exposes window.__soulStartSunny(); the 'join free' buttons fire it so the music + birds start on that click (persists via window across client nav). - Removed the 'for business' eyebrow header. - Verify done copy: 'where souls are gathering' (was 'the real ones').
bcfd3e9
Remove the 'verify you are real' eyebrow header from the verify flow
358f1ee
Fix lean signup: /verify runs for everyone, scrap the /me card
The old cookie guards on /verify (redirect to /humans if no member, /me if already verified) were from the two-step join-then-verify model and broke the lean flow: new users got bounced to /humans, already-verified users (the founder) got bounced to the old /me card on every 'join free' click. /verify now just renders the flow for everyone. /me redirects home (card scrapped).
99c7bf7
Verify onboarding: offline-network copy, not link/card copy
Jun 17
Wednesday
15 changes
abf881b
Lean signup: verify human -> name/city/email -> Kit -> done. No card.
The whole signup is now: face scan (the moat) -> if real, collect name + city + email -> join the Soul Members Kit list -> done. No Soul ID record, no card, no cover/world step (that was the blank screen). The liveness check is the only gate; being a verified human + on the list is the product.
22d10a0
Make Soul ID creation the signup: 'join free' -> /create
Nav, homepage hero, and the /humans join section now route into the Soul ID creation flow instead of the email-only waitlist form. Creation (liveness + card) is the signup.
bcb567a
No-login Soul ID: cookie ownership, kill the Google sign-in wall
- lib/soul-id/auth: getAuthenticatedSoulId now honors the soul_dashboard_token cookie as the primary owner check. The device that made the card owns it. Google session is now an optional recovery fallback, never required. - create-open: removed the redirect-to-/login wall. The liveness test is the only gate. Done CTA routes through set-cookie (Safari-safe) so the device owns the card for future retakes. - create-open route: set the soul_dashboard_token cookie on creation. - update-moments: added the 5-min creation grace so in-flow moments save without login (mirrors the update route). - /id and create-open: removed remaining "build your world" links/copy.
e2b333d
Un-gate the Soul ID flow: creation + card links + verification links go live
The prelaunch middleware redirected every non-allowlisted route to home, which hid the (now restored) Soul ID creation flow and every shareable/ verification link. Allowlist /create, /create-open, /dashboard, and the /id/, /v/, /retake/, /dashboard/ prefixes so the flow and links are reachable.
3e10594
Restore the rich Soul ID card: color picker, live pfp preview, moments
- create-open: new 'card' step after cover recording. Renders the live SoulIdCard with the recorded video pfp, a 7-color swatch picker, and an optional back-of-card moments uploader. saveCover persists backgroundKey; moments save via /api/soul-id/update-moments. Flow: username -> selfie -> cover -> card -> done. - /id/[username]: removed the floating Soul World canvas; the link now shows the clean card people see when you share it as proof you are real. - No DB migration, no Instagram OAuth reintroduced; card component unchanged.
efe6255
Badge scan: email-only, drop phone + SMS-consent checkbox
- SpotCheckin asks for city + email only; removed phone field and the "agree to receive texts" checkbox (email needs notice + unsubscribe, not an explicit opt-in like SMS). One-line disclosure instead. - spot/join route no longer requires/stores phone or smsConsent, and now adds scan-ins to the Soul Members Kit list like every other signup.
9ebf405
Lock the mass stance: verified means real, not elite
Killed all "500 souls / high-caliber / vetted / private / the right people" membership-gating language across site + spec. Membership is open to every real human and meant to be massive (100k+ in NYC). Scarcity lives only at the rooms and perks, venue-funded. We gate the night, never the door.
7c3fb19
Sharpen the core value prop: keep venues open for $250/mo, members get access
- SOUL_SYSTEM.md: add "the core problem we solve" (businesses stay open via cheap new-member acquisition; community gets exclusive access, perks, invites to gatherings) - Business pricing: "$250 a month to keep your room full of new, verified faces. less than one slow night." - Humans hero: members get exclusive access, perks, and invites to gatherings
73371a4
Lead both audience pages with the concrete two-sided problem
- Humans hero: name the member problem (can't find real people or the rooms worth showing up for) before the solution - Business hero: name the venue problem (paying for impressions not bodies, no proof who walked in) before the solution
5177af0
Email-first signup + Kit list wiring + badge-model business reframe
- Waitlist now email + city only; phone/SMS-consent removed from signup - New lib/convertkit.ts: every signup tagged into the Soul Members Kit list - Business page rebuilt around the badge: recruit + check-in + reward, killed dead map refs - SOUL_SYSTEM.md rewritten as the canonical appless-badge model - Scrubbed leftover "we text you" copy to email-first (privacy, contact card)
74b1658
Rewrite careers: kill the dead beacon roles, lean honest founding line
The careers page was advertising the dead brooch/beacon product with three salaried roles (engineer, hardware, ops) that aren't being hired or paid for. Replaced with one honest, on-brand statement: we don't really hire, but if you'd build this with us, find us. No fake roles, no salary promise.
b0687b4
Pull the map: no fake soul spots, removed from nav
The map was showing ~22 famous bars as 'soul spots' with live status, none signed, none real. Gutted the fabricated curated list (now empty), and removed Map from the nav + the 'see the live map' link. The map only ever shows venues that actually sign on, so it stays off the site until there are real Soul Spots to show. Then it becomes a true map.
93b499f
Tab title is just 'Soul' (was getting truncated); refresh stale default meta
Browser tab now shows 'Soul' instead of the truncated 'Soul · Where the Real Ones Are'. Tagline stays on the page and in link/social previews (openGraph + twitter keep the full line). Also refreshed the old default meta ('Do You Have One?') to the current brand.
ce57bc8
Clean venue signup: no reward field; rewards now fully optional
Venues become a Soul Spot with just name + city + email. No reward to think about on submission. Reward is optional, set later in the dashboard if they ever want one. Check-in screen shows 'verified soul / welcome in' when no reward is set, instead of a fabricated one.
a06b6e2
Exclusive business reframe + fix letter sentence + one-number dashboard
- Letter: fix the broken sentence (your phone tells you where to actually go tonight, the one thing a feed never could). - /business reframed to lead with the offer, not a dashboard: on the map, recommended nightly, the vetted crowd shows up. 'an ad that sends real bodies instead of impressions.' Premium, exclusive feel. - Venue dashboard stripped to one premium number: verified souls came this month (+ joined at your door). No SaaS clutter.
Jun 16
Tuesday
15 changes
61a0cca
Separate pages + member verification + Soul ID
Structure (per feedback): homepage is now ONLY the video + the letter. For Humans (/humans) and For Business (/business) are their own pages, nav tabs route to them (no more home-scroll). Removed the hero subline. Centered pill text.
44c567a
Clarity pass: hero CTAs, audience-split nav + homepage sections, 1080p video
- Hero video re-encoded to full 1080p high quality (9.9MB vs 17MB), still streams smooth. - Hero gets a clearer subline + two action buttons (join free / for business). - Nav reworked to be audience-clear: For Humans, For Business, Map, plus a persistent 'join free' button (desktop + mobile). - Homepage restructured into clean sections: video -> the letter -> For Humans (the explainer, how-it-works, join) -> For Business (the venue path) -> footer.
4fa3c3f
Business: book-a-demo to Google Calendar + self-serve CTAs; legal updated
- /business hero gets two CTAs (become a soul spot, book a demo) and the apply section a 'book a demo' link, both routing to the founder's Google Calendar booking page. Apply copy reflects instant self-serve. - Privacy + terms updated for the check-in system: disclose check-in (which spots you visit + when), the member cookie, and venue data; note rewards are offered by venues, not Soul.
5f3398e
Rewrite the letter: tighter, cooler, less preachy
Cut the therapy tone and the '50,000 on the couch' line. Now confident and short: the internet promised everyone and left us alone; soul is the verified network that tells you where to actually go; the best rooms, the right people, 500 a city. Out here is your life.
a5ad444
Fix glitchy hero video (17MB -> 4.9MB, play once); business self-serve signup
- Hero video compressed 17MB to 4.9MB (baseline H.264, faststart, no audio) and the per-render play() replay bug removed (play once via ref). That stutter was the buffering + replay loop. - Businesses now self-serve: /business signup creates their Soul Spot and drops them straight onto their own dashboard (QR, reward editor, check-in stats). Free to start. /api/business/signup.
f468eb0
Letter now tells the real company (network + signal + spots), not the beacon; fix map scroll-trap on mobile
LetterStack rewritten: Soul is a network of verified humans, free, your phone tells you where to go and who's really there, soul spots with rewards, the right people, 500 per city. Beacon/brooch removed.
2bb3f39
Venues choose their own reward; members browse active rewards
- /api/spot/update + RewardEditor on the venue dashboard: a venue picks from quick reward templates or writes a custom one, changes it anytime (even nightly). Self-serve, no admin needed. - /rewards page: members browse the active rewards at all soul spots, the thing that drives them to come and scan. Added Rewards to the nav. Full production build verified green.
5deaa56
Build the full Soul Spot check-in system (the revenue machinery)
End to end: a venue puts a QR on the window. Scanning hits /s/[code]. If you're a member (cookie), you're checked in instantly and shown your perk to flash at staff. If not, a quick join-free flow signs you up and checks you in. Every scan is tracked.
50fd4d4
Tighten homepage to sign-up; move full map to /map; wire Ticketmaster
Homepage: remove the heavy inline map and its data fetch, make sign-up the clear primary action (join free), add 'see the live map' -> /map and a 'for business' link. The full interactive map shines on /map.
629358d
Remove the Soul Spot badge (real logo in design)
f795035
Replace remaining 'apply to join' CTAs with 'join free' (no waitlist)
cdd8c0d
Articulate the company on-site + Soul Spot badge (the flywheel)
Homepage: lead with the tagline 'where the real ones are' + a clear two-sided concept strip (free for you / for business) with both doors. Updated title + meta to the tagline and the verified-network model. Business page: 'wear the mark' section with a downloadable Soul Spot badge (SVG) venues display on their door and site, the visible part of the flywheel that recruits members.
7e1af1e
Add the business side: For Business page, pricing, lead capture
Make the concept clear for both sides. New /business page: bring the verified crowd to your venue. How-it-works, three pricing tiers (Listed free, Soul Spot $250/mo, Partner $1000/mo), and a 'become a soul spot' form capturing venue + city + email into a new BusinessLead model. Added 'Business' to the nav, allowlisted the route.
07349e2
Soul spots go live 24/7 by real local nightlife hours
Curated top bars/clubs now carry an IANA timezone; liveSoulSpots() marks each 'open now' during its real local nightlife window (~6pm-3am), computed at render (ISR 5min). As the world turns, Tokyo, then Dubai, then London, then NY light up, so the map always has live points somewhere. Expanded to 22 real famous venues across timezones. Removed the unused static SVG map.
fcbd5f3
Make the Soul Map a real interactive map (MapLibre)
Replace the static SVG with a proper pan/zoom interactive map (MapLibre GL + OpenFreeMap vector tiles, no key). Pulsing markers for live events and soul spots, click any point for a popup (what/where/when/source). Used on the homepage hero and /map. Dynamic-imported client-only so it can't break SSR. Full production build verified green.

How this is made. A build step reads the git history and writes the entries above, so nothing here can be posed after the fact. The page shows the last 45 days, the counts cover 90, and the messages are the ones written at the time, first paragraph only. Last generated 2026-07-29.

What is withheld, and why. 119 entries in this window are counted but not described. Two reasons, both boring. We do not publish the detail of our own security work, because a closed issue to us is a map to somebody else. And we do not name a company we are not publicly working with, because a lot of products appear in this history as demo skins and test cases, and a list of them on a public page would read as a customer list we have no right to claim.

© 2026 The Soul Company, Inc.
PricingThe agentThe moatThe planChangelogPrivacyTermsCareersBook a demo