Your job search command center.
A clean, focused web app for tracking every touchpoint in your job search — from cold outreach to final offers. Built for people who want to stay organized without drowning in spreadsheets.
Job searching is chaos. You're juggling LinkedIn messages, cold emails, applications, networking events, and follow-ups across dozens of companies. Most people use sprawling spreadsheets that become unmanageable within weeks.
Inlet gives you one place to log everything with minimal friction:
- Quick Add — Log any activity in seconds with type, note, company, and link
- Touch System — When someone responds, hit "touch" to bump that thread to the top and track the conversation
- Active Threads — See exactly what's in motion and needs your attention
- Filter Views — Slice your activity by type (outreach, application, networking, content) or status (open, active, closed)
|
The heart of the app. Every action you take lives here with timestamps, categorization, and full history. |
Friction-free logging. Select type, write what you did, optionally link a company — done. |
|
|
|
Track your network and contacts. See related activities at a glance. |
Your resumes, cover letters, and portfolio links. One-click copy, open, or email. |
|
|
Your non-negotiables and deal breakers. Reference these when evaluating opportunities.
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router, Vite |
| State | Context API with custom hooks |
| Styling | Pure CSS (no frameworks) |
| Backend | JSON Server (development) / Express (production-ready) |
| Icons | Lucide React |
client/src/
├── components/ # Reusable UI components
│ ├── ActivityCard.jsx
│ ├── QuickAddModal.jsx
│ ├── TouchModal.jsx
│ ├── ActiveBanner.jsx
│ └── NavBar.jsx
├── pages/ # Route-level components
│ ├── ActivityPage.jsx
│ ├── CompaniesPage.jsx
│ ├── PeoplePage.jsx
│ ├── DocumentsPage.jsx
│ ├── ValuesPage.jsx
│ └── ResourcesPage.jsx
├── contexts/ # React Context definitions
├── providers/ # Context providers with business logic
├── hooks/ # Custom hooks (useAuth, useData)
└── index.css # All styles in one file
- Node.js 18+
- npm or yarn
# Clone the repo
git clone https://github.com/yourusername/inlet.git
cd inlet
# Install dependencies
cd client && npm install
# Start the development server
npm run dev# In a separate terminal, start JSON Server
cd server
npx json-server --watch db.json --port 3000{
activities: [{
id, type, note, link,
personId, companyId, documentIds,
status, created, touches: [{ date, note }]
}],
people: [{ id, name, role, companyId, link, notes }],
companies: [{ id, name, tier, link, notes }],
documents: [{ id, name, link, type }],
values: [{ id, text, type }], // type: "good" | "bad"
resources: [{ id, name, link, lastEngaged, notes }]
}Context-Based State Management
All data flows through a single AuthProvider that handles fetching, caching, and CRUD operations. Components consume via useAuth() hook.
URL-Driven Filters
Activity filters sync to URL params (/?type=outreach&status=active), making views shareable and bookmarkable.
Touch Mechanic When someone responds to your outreach, the "touch" action:
- Adds a timestamped note to the activity
- Changes status to "active"
- Bumps the item to the top of the feed
MIT
Built by Josh Dicker
Click 👆 to see more of my apps!




