hvisker

Trust

Only what the code makes true: what leaves hvisker, how long a sign-in lasts, and what it stores.

  • hvisker never sends outreach. It writes to nobody in a posting: a match leaves only when you copy it, or to the webhook endpoints you add in Settings.
  • What leaves: sign-in mail to your own address, and signed webhook posts to your endpoints over HTTPS, to public addresses only.
  • A webhook body carries the match whole: the offering, the positioning, the posting's address and text, the lines that answer it, when it reached you, its location stance, the channel it was built for, the pitch written for it and the person to send it to — their name, title and the one contact your channel reaches, withheld until you pay. An endpoint whose own address carries a contact it would receive is never sent that event.
  • A sign-in link and its code work once, for 15 minutes, and are kept hashed. A sign-in lasts 30 days.

What hvisker stores

Read off the database's own tables as this page is drawn.

What hvisker stores
TableWhat it holdsColumns
accountsyour account: its email; hvisker's own demo account is marked systemid, email, system, last_active_at
sessionssign-ins: which email holds each, until it expirestoken, email, expires_on
login_linkssign-in links and codes, hashed, until they are used or expireid, email, token, wait, code, expires_on, attempts, link_used_on, code_used_on, superseded
offeringsyour offerings: each name and kindid, account_id, position, name, kind
briefsa service's brief: what is sold and for whomoffering_id, sold, for_whom
materialsa person's CV as uploaded text, and the jobs wantedoffering_id, cv_file_name, cv_text, wanted
whereaboutswhere a person is based, whether they work in an office, remotely or either, and whether they would relocateoffering_id, country, mode, relocates
put_forward_aswhether each offering is put forward through an agency or as a contractor, and since whenoffering_id, supplier, at
attestationsconsent attestations: the sentence and the dayoffering_id, sentence, attested_on, subject, actor
positioningspositioning statements, and whether each is live or pausedid, offering_id, position, statement, state, looked_on
writtenthe brief, variant and pitch written for each positioningpositioning_id, brief, variant, pitch
arrivalsmatches: each posting's address, text and the lines that answerid, positioning_id, statement, source, language, country, text, appeared_on, found_on, answers, lines, reached_on, delivered_on, free_company
peoplethe person to send each match to: name, title, and work email or LinkedIn URLarrival_id, name, title, work_email, linkedin
phonesa phone number for the person to send a match to, and the provider it came from; shown only while phone numbers are onarrival_id, phone, provider
companiesthe company the signal names the person to send each match to as working at, when it names one, who lookups of its people found for each function and seniority its positioning's team rows name, and what the team block said of who it employs, quotedarrival_id, name, canonical_key
phone_optinswhether you turned phone numbers on, and whenaccount_id, at
paymentswhether you paid, and when; until then the account is on trialaccount_id, at
chargeswhat your use cost, in cents, and when; it comes off your $5.00 of trial credit first, and only what exceeds it is billedid, account_id, cents, at
works_aswhether you work as an agency and as a contractor, and since whenaccount_id, agency, contractor, at
channelshow you reach out: email, LinkedIn or phone, and since whenaccount_id, channel, at
built_forthe channel each match was built for: the one set when it was keptarrival_id, channel
triagewhat you did with each match: exported or rejected, and whyarrival_id, state, reason, at, prior_state, prior_reason, prior_at, undoable
chatwhat you said on each match and hvisker's answer, with where a new positioning it made is listedid, arrival_id, at, speaker, words, href
turned_downwhat you turned a role down in chat for requiring, per person, so they are not matched to a role requiring it againid, offering_id, what, arrival_id, at
ruleswhat you skip for each offering, one per kind of thing, taught by rejecting a role on Today, so later roles stating it are turned away; and the one it replaced, until undoneid, offering_id, dimension, value, arrival_id, at, prior_value, prior_arrival_id, prior_at, dealbreaker
refusalsmatches turned away after they reached you, by what their offering skips, by where its person is based, by who their company employs, by what their company is, or as seen already, with the sentence that says soarrival_id, offering_id, kind, key, sentence, rule, value, at
unlearnedthe last thing you unlearned for each offering, when, and the matches it brought back, so the Undo of its toast can learn it again within a dayoffering_id, kind, key, value, arrival_id, at, returned, unlearned_on
seenthe titles of roles you rejected as seen already, per offering, so a role titled the same is not shown againid, offering_id, key, arrival_id, at
removalspostings refused for turning away what you work as, with the sentence that says soid, account_id, source, found_on, sentence, recorded_on
sweepseach search's log: postings offered, kept and refusedpositioning_id, at, offered, kept, refused
failureswhen a search's last sweep failed, and the error, until a later sweep of it goes throughpositioning_id, at, reason
eventsedits, pauses and resumes of positioningsid, positioning_id, at, kind, detail, subject, actor
endpointsyour webhook endpoints and their signing secretsid, account_id, url, secret, enabled, created, disabled_on, disabled_by, failing_since
deliveriesevery webhook attempt and export: body, headers, answer and timingid, account_id, endpoint_id, event_id, event_type, payload, attempt, status, headers, code, response, took_ms, sent_on, next_on
asked_peoplewhich companies' people were asked of datagate recently, and who it answered, so the same company is not asked again within the remembered windowcompany_id, asked_on, people, known
cooldownshow many days an export to the same contact holds off a second one, and since whenaccount_id, days, at
asked_emailwhich LinkedIn URLs were asked of datagate for a verified work email recently, and what it answered, so the same one is not asked again within the remembered windowlinkedin, asked_on, email
voiceswhose voice your pitches speak in: your own or an agency's, and since whenaccount_id, voice, at
outcomeswhat came of each match you sent: replied, a call booked, won or no answerarrival_id, state, at
location_policieshow a role that does not suit where you work is scored: not a fit, or ranked low, and since whenaccount_id, policy, at
work_kindsthe kinds of work each positioning is ticked for: fractional, contract or permanentpositioning_id, kind
spend_sharesthe share of your monthly price spend finding contacts may use before search pauses, and since whenaccount_id, pct, at
topupsa top-up of one month's price added to your spend cap, in cents, and whenid, account_id, cents, at
closuresa match you were waiting on whose posting closed, when, and the line saying whyarrival_id, at, reason
uncappedwhether the monthly allowance and spend cap are lifted off your account for a daily limit, for hvisker's own people, and since whenaccount_id, at
api_keysyour API keys for the REST API and the MCP server: a label and when each was made or revokedid, account_id, token, label, created, revoked_on
asked_aiwhich companies Claude was asked about recently for a positioning's company facts, from their postings, and what it answered with the posting's words that show it, so the same company and question are not asked again within the remembered windowcompany_id, question, asked_on, says, quote, source, why
team_rowswho a company must or mustn't already employ for each positioning, row by row: a function, its leaders or staff, absent, present or how many, whether it filters or only scores, and why, in your wordspositioning_id, position, function, seniority, op, n, strength, why
team_wordswho a company must or mustn't already employ, in the words you saved before rows, until you compile them into rowspositioning_id, sentence
fact_rowswhat each positioning asks of a company: its headcount, industry, stack, what it builds or your own question, whether it must, is preferred or only sorts, and what happens when unknownpositioning_id, position, subject, value, strength, on_missing
fact_verdictshow each match's company came out against its positioning's company facts when it was kept, with the fact and where it came fromarrival_id, verdicts
screening_reportsevery screening report a simulation ran and kept for a match's role: the job ad, CV or service description and pitch it read, the report, and when it ranid, account_id, arrival_id, job_ad, resume, pitch, checks, recruiter_notes, fixes, created_on
simulationswhen you ran an application simulation on a match, counted against your month's capid, account_id, at
resolved_companieswhich companies were looked up with bossroster recently and the key it resolved them to, so the same company is not resolved again within the remembered windowcompany_id, resolved_on, canonical_key, size_band
asked_bossrosterwhich companies were asked of bossroster recently for one of your team rows' presets, and what it answered, so the same company and preset are not asked again within the remembered windowcompany_id, preset, asked_on, met, rule_id, reason
company_teama company resolved to its bossroster identity (hvisker-172): the identity itself, and the signed team-facts digest kept against it, shared by every match at that company instead of looked up again for each onecanonical_key, aliases, team_digest, as_of, verdicts