This release fixes critical billing and payment issues, improves contract signing and management, launches the new events platform for Pizza Night, and resolves widespread bugs across the app that were blocking core workflows.
The events platform for Pizza Night is live with QR check-in, direct messaging, admin consoles, and guest list import from Luma.
stop discarding certifications from both sources
build the four surfaces that were toggles wired to nothing
EnrichLayer adapter, and the company provenance the graph never had
gate client authoring to buildable kinds, make settings editable
send the real agreement, and pin what was signed
a query that finds purchases we took money for and never granted
make the talent, recruiter and client surfaces actually bilingual
"me anoté con otro mail", without turning the list into an oracle
427 verified ATS boards, discovered free from the YC list
the client's own board, mapped by the client
a way to your own card from anywhere, not just the dashboard
capture the terms nobody could write, and stop the Ask endpoint losing answers
rebuild the candidate record on the secondary rail
the candidate drawer answers fit first, and can be asked about it
send the events sign-in a code and nothing to tap
one picker for /book and /interview, timezone inline
the job record becomes a cockpit on the secondary rail
read the pipeline as a funnel, not just a snapshot
surfaces for legal entities and contract templates
rebuild the cost-of-hire comparison around the answer
section library, conversion pages, and the gates that can finally see them
a per-user public card for every persona
legal entities are a table, and verification attaches to them
bilingual conversation UI, question generator and copy
profile-enrichment voice conversation — guards, wizard step, migrations
add an annual salary basis to the rate type
bridge the two company universes
follow a company in either universe, and follow one opening
capture the conference identity, and teach a space to transcribe itself
give the event a producer, a kill switch, and an opt-in default
give the Zoom and Teams adapters a producer, and gate the link that had none
ingest what actually happened, and fix three things that never worked
make the restricted recording scope a switch, not a hard-coded absence
recording as a second consent, and four hosted-call paths that never ran
the AI pass, the daily rollup, and an erasure ledger that outlives what it erases
the canonical model and the seam every provider plugs into
the surfaces that read what the pipeline writes — for zero new routes and one action
the Zoom connect flow, and a latent P0 the new provider row would have triggered
turn interview transcripts on, without asking Google for permission
Zoom and Teams adapters, and a gate for the wiring that has no compiler behind it
step 2 stops accepting any number and starts anchoring it
one role, one card — and a page you can actually reach
redesign the feed row and close the outcome loop
the platform can finally count what it finds
the platform can finally count what it finds
a card you'd hold up, not a form with a hidden QR
a My card surface every persona can mount
a printable handle, and an availability check that can see the whole table
a way to actually create the card
derive persona from workspace membership, not account_type
stages become data, and the board reads them
stages become data, and the board reads them
one presence carries the whole voice conversation
metadata-driven analytics engine core (registry + compiler)
wire the analytics engine to a working twelve-section surface
extract @diiirect/storage, the one R2 client
one ask per screen, and a merge you can actually see, closes hi#water
a filter rail, sortable columns, and empty states that say which nothing this is
lazy-load the job section views in the catch-all dispatcher
the agent page said "not found" for an agent that exists, and every empty state was a dead end
narrow the locale, and let an empty name mean absent
the auth hook was the one path that could email from local dev
the pipeline views lost their stage-age badges
restore events catalogs and schema types
three type errors the branch merge left on staging
the default reveal path was reading keys the API never returns
carry the new tracked_companies + source_runs columns into types
the page gutter never grew, so content sat glued to the sidebar
register the template source route in the API manifest
freeze the currency-formatter divergence so it cannot grow
make the quality gates see what they were supposed to guard
the admin Deel console reads the roster, which is not identity resolution
close the QR profile card's status gap and privilege-test blind spots
move the question script off a candidate-writable column
the conversation was never recorded, and opened in Portuguese
write the project brief to the column the job boards read
the follows migration could not apply to a database
the hosted backfill had no caller, and the gate for that was green
three guards that were not guarding — spend, citations, and an unbounded read
stop guards releasing locks they never held
the feed could never show an external posting locally
the feed row was unusable on a phone
the reach cockpit put server-only in the browser bundle
isHandleAvailable was an open enumeration oracle
reserve the 10 route segments the hand-derived list missed, and stop it rotting
the character counters threw instead of counting
the headline fix was inert on its own primary path
the My card mounts, matched to the house pattern
you could not see your own card until you had one
stop inviting the candidate to talk over Alex
the orb ignored the size its caller asked for
extract the /@ rewrite so its own test exercises production code
the /@ rewrite discarded the cookies the same request had just set
make tenancy a principal, and fix the 40 type errors a cancelled gate hid
the truncation flag could never fire, so every large workspace was silently undercounted
a broken calendar rendered as "never connected", hiding every recovery control
a failed calendar write left the connection reading "active", and only talent could retry
the Mon-Fri availability fallback was dead, and the range cap truncated a month
the setup wizard hid a broken connection's calendars, on the step it now routes them to
give the collapsed rail a way out, and a glyph you can see, closes #4d7c0f
move the collapse control out of the row that squeezes it
the tablet rail painted 240px of sidebar inside a 72px track
a shadow root retargets event.target, so every typing guard failed
three defects a screenshot would not have caught
resolve the undefined design tokens, the AA contrast failures and the missing accessible names, closes #4d7c0f
two lint errors the branch was already carrying
stop discarding certifications from both sources
the public card stops 404ing for three of four personas
remove the approval gate — signup ends at the dashboard
render certifications on the compare screen, and make the E2E refuse to pass on real data
restore the amputated provider chain, and make the next cut loud
an invited viewer saw a header and eight empty sections
fail closed on a talent-read error, not an empty non-talent shell
fail closed on visibility read errors, and stop widening access for cards with no talent row
the shared QR had a transparent quiet zone
the voice interview had no waveform, no bounds and two footers
build the four surfaces that were toggles wired to nothing
parallelize two independent awaits in the workspace layout
close the audit's P0s and the surfaces wired to nothing
EnrichLayer adapter, and the company provenance the graph never had
funnel failures are recorded and visible to admins
make the registry parity check real, and give it the bucket that mattered
revealCompany, and the company-hiring series that never existed
a spend watchdog that stays quiet until it can tell the truth
ask our own graph before paying a vendor, and say who answered
make a paid search cost money, leave a trace, and have a ceiling
the filters were never missing, they were folded shut
the low-balance email finally has a sender
the surface stops saying searching is free, and shows the faces
a failure sink that throws could crash the reveal it was logging
a vendor's name ranking is a suggestion, not a match, closes hi#quality
Apollo search hit a retired endpoint and mis-read the new one
every Coresignal call had been 404ing since v1 was retired
five console surfaces that have never worked, one of them mine
PDL crashed after billing, and returned everything lowercase
switch off the two vendors that provably cannot answer
gate client authoring to buildable kinds, make settings editable
send the real agreement, and pin what was signed
versioned contract bodies with a publish gate that can refuse
wire the agreement body into the real send
restore the capability entry and cast the un-regenerated column
the send never used the country scope, and the locale was hard-coded
the signature flow was lying, and production never heard a signature
the talent could not open the contract we told them to sign
the talent could not open the contract we told them to sign
the wallet webhook would have claimed every credit and plan checkout
a query that finds purchases we took money for and never granted
audit the subscription and payment-instrument lifecycle, closes hi#write
batch entitlement resolution, and a surface gate that fails open
give the provider customer id a table with real uniqueness
make the trial card requirement a per-plan setting
plans get an audience, and talent gets its real $20 tier
register browse_talent, outreach_agents and market_intelligence
repair the subscription periods the webhook never wrote
tell customers when a renewal fails
the flip — four capabilities become Professional
trial_requests — the trial we decide, not the one they self-serve
watch the billing state nothing else can see
"Talk to sales" opens the HubSpot CTA popup, not our side panel
four animated feature demos, bilingual and reduced-motion safe
gate the recruiter surfaces, and the outreach engine itself
Pro pills and the locked page, wired through the client workspace
the CTA state machine, as a pure function
the locked feature page, its CTAs and its two panels
a credit purchase no longer depends on a webhook subscription
a wallet deposit no longer depends on a webhook nobody wired
commit the surface gate and its batch RPC, which a typo dropped
ContactOut's real costs, and prices that are no longer below them
make a stranded wallet deposit visible, and correct what misled me
read the admin tier from the declaration, not a literal
stop half-recording refunds, and stop claiming a gateway we do not have
stop telling customers with good cards that they were declined
Talent Pro joins the tier ladder, and stops denying 50 features
the plan page offered three money controls to members who cannot use them
the Pro-gate card CTA 404'd, and three money paths were unguarded
the reconciler could clobber a fresher webhook write, and the narrowing did not hold for new code
trial_requests gives a browser JWT no write at all
close three gaps my own spec required and I had not built
exempt the demo monogram from the faceless-person guard
re-bind the HubSpot CTA after a client-side navigation
render the demo instead of calling it across the RSC boundary
the first "Talk to sales" click always does something
make the talent, recruiter and client surfaces actually bilingual
webapp-upgrade namespace, EN + ES
www-technologies namespace, templated rather than per-slug
tell the client their portal drifted, in words that are true
refuse to mark a platform_credit payout paid, and re-run the payout gate
show the payout method, and surface the refusal instead of a raw error
declare webapp-support on the client scope, which now reaches it
drop the duplicated webapp-support in the client scope
restore the keys a merge deleted, author the ones never written, and gate both
the parity gate could not see array-length drift
the two new sections had no loading state
9 security hardening fixes
"me anoté con otro mail", without turning the list into an oracle
"Yo" shows what the room sees, not a form to fill in
a people console — the whole record, and something to do about it
a way back from an error, and the install prompt nobody was ever shown
add Alkemy and Circo Reciclado to the supporter strip
add c.home + Nerdearla sponsors, two speakers, fix dead rail links
add c.home + Nerdearla sponsors, two speakers, fix dead rail links
an event that is not in a building
connect by QR, direct messages, and three consoles — with four holes closed on the way
dev toolbar with phase and clock simulation
enforce the event phase on the writes, not just the tabs
event terms, recorded consent, and who takes the money
finish the chat redesign
give the five screens a hierarchy, using the accents the system already shipped
import the Luma guest list, and show each person their own place in it
let an attendee have a face
open the chat only to people at the venue
paste a LinkedIn link, a real visibility switch, honest CTAs
rebuild the profile form around a live preview
redesign momentos, búsquedas, mapa, pase, cierre and avisos
seed a room, and fix the directory it exposed
shared UI kit for the in-event surfaces
sign in on the poster instead of navigating to a page that asks again
signing in lands on the profile, not back on the poster
staffing, because nobody could work the door
suggest the company from the email domain
the edit form asks what the step flow asks
the follow-up question depends on the role, in the platform's words
the guest list becomes a list, and the card names its destinations
the landing page stops being one night's poster
the Luma answer wears the Luma mark
the poster asks for the account, and credits everyone the landing does
the two tables you could read and never write
traffic-light status, and drop the company suggestion
"algo falló de nuestro lado" was the app refusing, not failing
"contá qué hacés" was one box answering three questions
"No sos vos, cambialo" had no way back out
"where do I upload the guests?" was a labelling bug
a platform admin got 404 from the staff console they own
a type re-export from a 'use server' module broke the build
an admin had no way to reach the admin
carry the jest ESM transform patch the split dropped
every pizza QR scan answered "invalid"
once the code is sent, the code is the only thing on screen
rebuild the lockfile from staging's, not the other branch's
reconcile perk and presence integrations
the app answered 500 on every route, and pizza could not be handed out
the chat was unreachable, and open in the wrong phase
the Luma email requirement moves onto the field, out of the footnote
the profile card said "así te ve la sala" twice
the sponsors migration was only half idempotent
the venue is "Parque de Innovación", not "Parque de la Innovación"
two staff scanning one guest handed out four slices
427 verified ATS boards, discovered free from the YC list
AI editorial drafter for technology pages
extract technologies from postings into posting_technologies
Jooble as a query source, with its budget written down
operator controls, delivery ledger, logos and a match simulator
six new free sources, and Adzuna in 18 countries instead of 5
surface WHO knows a technology, joined by key
technologies become a first-class entity, not a tag
the crawler heals itself, and its telemetry stops lying
TheirStack — the first metered vendor, and a ceiling that binds
/technologies surface — pages, index, sitemap
add a Blog link to the footer
data layer for technology pages
invert the skill matcher so extraction stops scaling with the catalog
stop paying for an ISR cache that only ever gets written
four migration versions collided with the events branch
seven sources were crawling into a void
the technologies surface was never invalidated, and its sitemap test could not run
section headings were laid out as a flex row, not a stack
the booking page existed, nothing pointed at it
the technology page was visually broken in three ways no test caught
the client's own board, mapped by the client
the connector learns that a stage is not a status
the portal can be spoken to, upgraded, and given back
add the diiirect CMS theme for blog + landing pages, closes #cdff89
close the gaps found against HubSpot's Elevate theme, closes #c1ff00 #07110a #f8fbf6
make axe-core on the rendered pages a gate
seed the blog fixtures properly, and fix what that exposed
the navbar now matches www
the three email system pages, and a footer identical to www
the webinar page becomes a real drag-and-drop page
webinar layout gives the calendar room, plus a design pass
three of the five lifecycle features did not exist
keep dev tooling and fixtures out of the portal
make the CLI preview patch self-healing
stop shipping test artifacts to the live portal
system pages were invisible in Settings
use HubSpot's own Meetings module for the calendar