CASE STUDY
JustOneCall
Lowering the activation energy for civic action by turning “I should do something” into one clear call, with calmer scripts, address-based routing, and shareable issue pages.
ROLE
Founder · Product Design · Research · Dev
USERS
Everyday constituents · first-time callers
CONSTRAINTS
High stakes · misinformation risk · built in days

OVERVIEW
What this was
JustOneCall is a mobile-first civic web app that helps people contact their elected representatives quickly and clearly.
The core design goal was restraint: remove unnecessary choices, reduce anxiety, and keep the experience honest about what a call can and can’t do.
THE PROBLEM
Where people got stuck
- Orientation: “Who do I contact? Federal? State? Local?”
- Language fear: “I don’t want to say the wrong thing.”
- Time scarcity: “I have two minutes.”
- Emotional overload: anger, grief, and anxiety spike right before action.
These weren’t motivation issues. They were workflow issues. The typical civic stack makes people do research and self-editing at the worst possible moment.


APPROACH
How I worked
I treated this like a high-stakes workflow, not a content site. The design had to work for first-time, one-time users on a phone, often in a heightened emotional state.
- Mapped the anxiety spikes: where people tend to freeze, abandon, or delay.
- Designed for clarity under pressure: plain language, obvious next steps, low visual noise.
- Avoided performative patterns: no “engagement loops,” no dark-pattern urgency, no guilt funnels.
IMPLEMENTATION
How I integrated Google Places for address lookup
The highest-friction step is also the most fragile: entering an address correctly under time pressure. I integrated the Google Places Autocomplete API so users can type naturally, select a valid suggestion, and move forward with a normalized address that resolves the correct representatives.
- Client-only script loading: the Places script is loaded in the browser to avoid SSR issues and keep the page stable.
- Autocomplete on the input: suggestions reduce typos and ambiguity (apartment formats, abbreviations, partial entries).
- Normalization: on selection, I extract a clean formatted address (and optionally lat/lng) for reliable rep lookup.
- Privacy by design: addresses are not stored. The UI states that clearly, and the system only sends what’s needed to perform the lookup.
- Fallback: if autocomplete fails, users can still type manually and proceed.
The goal wasn’t “map features.” It was fewer dead-ends at the exact moment people are deciding whether to act.
// client-only (avoids SSR issues)
<GooglePlacesScript apiKey={process.env.NEXT_PUBLIC_GOOGLE_API_KEY!} />
// user selects a suggestion
const place = autocomplete.getPlace()
const normalized = place.formatted_address
// send minimal payload to server route for rep lookup
await fetch("/api/lookup", { method: "POST", body: JSON.stringify({ normalized }) })This section is intentionally short: it shows implementation choices without turning the case study into documentation.
THE SOLUTION
What changed
The solution is a compact system that turns “I should do something” into one contained action.
- Address-based routing: find the right representative without making the user research.
- Issue summary + sources: enough context to speak confidently, without overwhelming.
- Call sheet: a single screen that supports dialing, reading, and staying steady.
- Shareable issue pages: built for fast spread without requiring repeat explanation.
- Ethical constraints: honest language, careful sourcing, and no sensational UI.


IMPACT
What improved
- Lower abandonment once users selected a script style (less “I don’t know what to say” drop-off).
- People reported feeling less nervous and more grounded before dialing.
- Clearer expectations reduced the sense that civic action must be perfect to count.
The north star was time: respect two minutes of attention as a real constraint, not a failure of willpower.
LEARNINGS
What I learned
In civic moments, clarity is compassion. People don’t need louder calls to action. They need quieter instructions and dignity in how they’re asked to participate.
Design isn’t neutral when stakes are human. It either helps people act, or it teaches them to look away.
NEXT
What I’d do with more time
- Multilingual support and clearer plain-language QA.
- Image-based sharing (downloadable share cards with a link).
- Formal accessibility testing across screen readers and voice control.
- A lightweight issue template so trusted groups can launch responsibly.