App design template · Example

Recruiting workspace design

Example: a company hiring across several countries. Resumes sit in a shared Google Drive folder and a hiring inbox, interviewers write feedback in different formats, and offers live in email. One App runs one workflow, from the first resume to the first day, across ten tables. Every candidate is one record with one thread, so the team and agents talk about a person in one place.

Workflow
First resume to first day
App
1 custom App
Tables
10
Data sources
Google Drive · Gmail · Google Calendar · Read AI

01 Business flow

Agents organize, match and draft. People make the calls: screening, interview feedback, the offer and the start date. Each candidate has one thread where the team and agents discuss that person.

HRHiring managerInterviewerApproverAgentExternal system

First resume to first day

Every resume lands on one candidate record with its own thread. The agent matches, schedules, drafts feedback and emails; people screen, assess, approve the offer and own onboarding.

Outcome · One record per candidate from resume to first day, with every decision made by a person

Stage 1 · Intake and screening

HR
Agent
External system
01

Resume arrives

A new file in the Google Drive hiring folder, or an email with an attachment in Gmail

02

Parse and dedupe

Extracts name, contact details and experience; matches on email and phone and attaches the file to the existing person

03

Match to positions

Checks each open position's requirements, lists what is met and missing, and suggests the best fit

04 · People decide

Screening call

Move to interview, keep in the pool, or decline, from the candidate's thread

Stage 2 · Interviews and feedback

Hiring manager
Interviewer
Agent
External system
05

Schedule

Reads interviewer calendars and drafts the invite in Gmail; HR approves before it is sent

06

Record and transcribe

Read AI joins the call and produces a transcript afterwards

Writes interviews
07

Draft feedback

Fills the position's scorecard with strengths, concerns and quotes with timestamps

08 · People decide

Edit and submit

Adjusts the draft and recommends hire, hold or no hire

09 · People decide

Round decision

Once all feedback is in, reviews it side by side and moves to the next round, an offer, or a decline

Stage 3 · Offer and first day

HR
Hiring manager
Approver
Agent
10

Draft the offer

Level, salary within the band, start date

Reads positions
Writes offers
11 · People decide

Approve

Approver confirms level and salary

Writes offers
12

Offer email and tasks

Drafts the offer email for HR to send; once accepted, creates the onboarding checklist

13

First day ready

Owners tick off equipment, accounts and the first-week plan

02 Tables

10 tables in 1 App. Positions, scorecard criteria and candidates are master data. Resume files, applications, interviews, feedback, offers and onboarding tasks track one candidate through one position. Activities log every email, note and stage change on the candidate's timeline.

erDiagram
  direction LR
  candidates ||--o{ resume_files : "sends"
  candidates ||--o{ applications : "applies"
  positions ||--o{ applications : "receives"
  positions ||--o{ scorecard_criteria : "assessed by"
  applications ||--o{ interviews : "schedules"
  interviews ||--o{ evaluations : "produces"
  applications ||--o| offers : "results in"
  applications ||--o{ onboarding_tasks : "prepares"
  candidates ||--o{ activities : "logs"
The candidate is the center: their resume files, applications, activities and, through applications, interviews, feedback, the offer and onboarding tasks.

Workflow steps by table

One workflow, ten tables. Each step reads what it needs and writes its result to a table.

positionsscorecard_criteriacandidatesresume_filesapplicationsinterviewsevaluationsoffersonboarding_tasksactivities
01 Resume arrives External systemWrite
02 Parse and dedupe AgentRead · WriteReadWrite
03 Match to positions AgentReadWrite
04 Screening call HRRead · WriteWrite
05 Schedule AgentReadWriteWrite
06 Record and transcribe External systemWrite
07 Draft feedback AgentReadReadWrite
08 Edit and submit InterviewerRead · Write
09 Round decision Hiring managerWriteRead
10 Draft the offer HRReadWrite
11 Approve ApproverRead · Write
12 Offer email and tasks AgentReadWriteWrite
13 First day ready Hiring managerRead · Write

03 Fields

Each field lists its type, constraints, which source fills it and which roles can see it. Fields with no source are filled by people in the App or set by the process.

HRHiring managerInterviewerApproverAll rolesAuthor only

positions PositionsMaster9 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
titletextPosition titlerequiredAll roles
departmenttextDepartmentrequiredAll roles
locationtextLocation or countryAll roles
hiring_managermemberHiring managerrequiredAll roles
requirementstext[]Requirements, one per line, used for matchingrequiredAll roles
headcountintNumber of hiresdefault 1HRHiring manager
salary_bandtextSalary bandHRApprover
statusenumOpen / Paused / Closeddefault OpenAll roles

scorecard_criteria Scorecard criteriaMaster5 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
position_iduuidPositionFK positionsAll roles
roundenumRound 1 / Round 2 / FinalrequiredAll roles
criteriontextWhat is assessedrequiredAll roles
what_good_looks_liketextWhat a strong answer showsAll roles

candidates CandidatesMaster12 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
nametextFull namerequiredGoogle DriveGmailAll roles
emailemailEmail, the dedupe keyuniqueGoogle DriveGmailHRHiring manager
phonetextPhone in E.164 formatGoogle DriveHRHiring manager
locationtextWhere they are basedGoogle DriveAll roles
current_companytextMost recent companyGoogle DriveAll roles
current_titletextMost recent titleGoogle DriveAll roles
years_expnumericYears of experienceGoogle DriveAll roles
skillstag[]Skill tags, normalized to a tag dictionaryGoogle DriveAll roles
source_channelenumDrive folder / Inbox / Referral / LinkedInrequiredGoogle DriveGmailHRHiring manager
ownermemberRecruiter who owns this candidateHR
talent_statusenumNew / Active / Pool / Hired / Declineddefault NewHR

resume_files Resume filesProcess7 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
candidate_iduuidCandidateFK candidatesGoogle DriveGmailAll roles
file_nametextFile namerequiredGoogle DriveGmailAll roles
file_urlurlLink to the original filerequiredGoogle DriveGmailHRHiring managerInterviewer
sourceenumDrive folder / Inbox / ReferralrequiredGoogle DriveGmailHR
received_attimestampReceived atrequiredGoogle DriveGmailHR
parse_statusenumParsed / Needs review / Duplicatedefault ParsedHR

applications ApplicationsProcess11 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
nametextDisplay name: candidate · positionrequiredAll roles
candidate_iduuidCandidateFK candidatesAll roles
position_iduuidPositionFK positionsGoogle DriveGmailAll roles
stageenumScreen / Round 1 / Round 2 / Final / Offer / Hired / RejectedrequiredAll roles
fit_summarytextFit notes, drafted by the agentHRHiring manager
matched_reqstext[]Requirements metHRHiring manager
missing_reqstext[]Requirements missingHRHiring manager
manager_decisionenumPending / Meet / Passdefault PendingHRHiring manager
next_steptextWhat happens nextAll roles
applied_attimestampApplied atrequiredGmailHRHiring manager

interviews InterviewsProcess9 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
nametextDisplay name: candidate · roundrequiredAll roles
application_iduuidApplicationFK applicationsAll roles
roundenumRound 1 / Round 2 / FinalrequiredAll roles
interviewermemberInterviewerrequiredGoogle CalendarAll roles
scheduled_attimestampInterview time, stored in UTCGoogle CalendarAll roles
meeting_linkurlMeeting linkGoogle CalendarAll roles
transcript_urlurlTranscript linkRead AIHRInterviewer
statusenumTo schedule / Scheduled / Done / Cancelleddefault To scheduleAll roles

evaluations FeedbackProcess9 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAuthor only
nametextDisplay name: candidate · round · interviewerrequiredAuthor only
interview_iduuidInterviewFK interviewsAuthor only
strengthstextStrengths against the scorecardRead AIAuthor only
concernstextConcernsRead AIAuthor only
evidence_quotestext[]Candidate quotes with timestampsRead AIAuthor only
recommendationenumHire / Hold / No hirerequired on submitAuthor only
statusenumDraft / Submitteddefault DraftAuthor only
submitted_attimestampSubmitted atautoAuthor only

offers OffersProcess9 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKHRApprover
nametextDisplay name: candidate · positionrequiredHRHiring managerApprover
application_iduuidApplicationFK applicationsHRHiring managerApprover
leveltextLevelrequiredHRHiring managerApprover
base_salarycurrencyAnnual base salaryrequiredHRApprover
start_datedateProposed start daterequiredHRHiring managerApprover
approvermemberApproverrequiredHRApprover
statusenumDraft / Pending approval / Approved / Sent / Accepted / Declineddefault DraftGmailHRHiring managerApprover
sent_attimestampSent atGmailHRApprover

onboarding_tasks Onboarding tasksProcess6 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKHRHiring manager
application_iduuidApplicationFK applicationsHRHiring manager
tasktextTaskrequiredHRHiring manager
ownermemberWho does itrequiredHRHiring manager
due_datedateDue daterequiredHRHiring manager
statusenumTo do / Donedefault To doHRHiring manager

activities ActivitiesProcess6 fields

FieldTypeDescriptionConstraintSourceVisible to
iduuidPrimary keyPKAll roles
candidate_iduuidCandidateFK candidatesAll roles
kindenumEmail draft / Email sent / Note / Stage change / Agent actionrequiredGmailAll roles
summarytextWhat happenedrequiredGmailAll roles
actortextWho did it, person or agentrequiredAll roles
occurred_attimestampWhenrequiredGmailAll roles

04 Field mapping

How fields from external systems land in the tables. Sources first, then each mapping with its field pairs and transform rules.

SourceWhat we takeSyncDirectionWrites to
Google DriveResume PDFs and docs in the hiring folderFull backfill once, then incremental every 24 hoursInresume_files
GmailCandidate emails, attachments, invite and offer draftsOn each new email; drafts sent after approvalIn / Outapplications
Google CalendarInterview eventsWhen an event is created or changedIninterviews
Read AIInterview transcriptsAfter the meeting endsInevaluations
Google Driveresume_files

Resume intake

Each new file becomes a resume file; the agent reads it and fills the candidate. If the email already exists, it attaches to that person and fills only empty fields.

Source fieldTarget fieldTransform rule
File nameresume_files.file_nameAs is
File linkresume_files.file_urlKeep the Drive link, do not copy the file
Created timeresume_files.received_atStore in UTC
Resume · namecandidates.nameTrim spaces and honorifics
Resume · emailcandidates.emailLowercase; dedupe key
Resume · phonecandidates.phoneNormalize to E.164
Latest job · company and titlecandidates.current_company, current_titleAs is
All job start and end datescandidates.years_expMerge overlapping ranges, sum, one decimal
Skills sectioncandidates.skillsNormalize to the tag dictionary
Parent folder nameapplications.position_idFolder name matches positions.title; no match goes to review
Gmailapplications

Gmail applications

Attachments go through the same resume intake. If the email names no position, the agent suggests one from the match and HR reviews it.

Source fieldTarget fieldTransform rule
From addresscandidates.emailLowercase; dedupe on it
Subjectapplications.position_idMatch position titles; flag for review if several match
Received atapplications.applied_atStore in UTC
Message summaryactivities.summaryOne line, kind Email received
Google Calendarinterviews

Calendar sync

Invites the agent drafts carry the interview ID in the event title, which is how events match records.

Source fieldTarget fieldTransform rule
Interview ID in event titleinterviews.idMatch on primary key
Start timeinterviews.scheduled_atStore in UTC, show in the viewer's time zone
Attendee emailinterviews.interviewerMatch to a team member by email
Meeting linkinterviews.meeting_linkAs is
Read AIevaluations

Feedback drafts

Drafts appear only in that interviewer's feedback, as Draft. They count once the interviewer edits and submits.

Source fieldTarget fieldTransform rule
Transcript linkinterviews.transcript_urlAs is
Transcript, by scorecard criterionevaluations.strengths / concernsOrganized by scorecard_criteria for that round
Candidate segmentsevaluations.evidence_quotesQuote verbatim with timestamps
Constantevaluations.statusDraft
Internal mappingonboarding_tasks

Offer accepted to onboarding

Runs when an offer becomes Accepted. The checklist comes from the position's department; owners can edit it.

Source fieldTarget fieldTransform rule
offers.start_dateonboarding_tasks.due_dateEach task due a set number of days before the start date
positions.hiring_manageronboarding_tasks.ownerFor manager tasks; HR tasks go to the candidate owner
offers.status = Acceptedapplications.stageSet to Hired
candidates.talent_statuscandidates.talent_statusSet to Hired

05 Who sees what

Interview feedback is isolated between interviewers until a round is complete, and salary is visible only to HR and approvers.

HRHiring managerInterviewerApprover
Positions and scorecardsEditEditViewView
Candidate profile and timelineEditViewViewView
Contact details and resume filesEditViewResume onlyHidden
Fit notesViewViewHiddenHidden
Interview scheduleEditViewOwn interviewsHidden
Own feedbackEditEditEditHidden
Others' feedback · round not completeHiddenHiddenHiddenHidden
Others' feedback · round completeViewViewThis interviewView
Offer salaryEditHiddenHiddenEdit
Onboarding tasksEditEditHiddenView

An agent reads data with the permissions of the person it is working for. When an interviewer asks it to draft feedback, it cannot read other interviewers' feedback.

06 From design to App

Once the design is signed off, the custom App is built from the same definition: one data entity per table, plus these pages. Every candidate page opens that person's thread.

Mock data for a quick build: 3 positions, 5 scorecard criteria, 5 candidates, 5 resume files, 5 applications, 5 interviews, 4 feedback, 1 offers, 3 onboarding tasks, 8 activities.