AshiHQ: my portfolio, job hunt and freelance business in one app
My work lived in a dozen places: a stale portfolio, job spreadsheets, freelance notes and client logins in chats. I built AshiHQ: a portfolio with a self-publishing case-study CMS, plus a private admin with job discovery and matching, client projects and earnings, project docs and a zero-knowledge credential vault.
0
Passwords the server can read
3
Job sources matched daily (Adzuna, Jooble, Indeed)
600k
PBKDF2 iterations protecting the vault
37
Automated backend tests
Table of contents
The business problem
As a full-stack developer with a day job and freelance clients, my working life was spread across a dozen places:
- A portfolio that needed a code change and a redeploy for every new project, so it was always out of date.
- A job hunt in spreadsheets: which company, which role, which résumé I'd sent, and when to follow up, with no way to tell which résumé actually got responses.
- Freelance projects tracked in notes and chats: budgets, what was paid, paid add-ons (like "Android and iOS apps" after a website), and deadlines.
- Client credentials everywhere: Zoho mail, GoDaddy domains, AWS, Cloudflare R2… in notes and messages, which is risky for me and my clients.
- Job searching by hand across LinkedIn, Naukri and Indeed, with three different résumés for three kinds of roles.
I wanted one place that is my public face and my private command centre: secure, mobile-friendly, and quick enough to use every day.
Why existing solutions failed
- Portfolio builders look generic, and they don't support detailed case studies with diagrams or link to the work behind them.
- Job trackers (spreadsheets, Notion templates, Huntr-style apps) record applications but don't find jobs, score them against your résumés, or tell you which résumé works.
- Freelance tools handle invoicing, but not "this client also has GoDaddy, Zoho and AWS logins" plus project docs.
- Password managers are great, but they're separate from the client and project they belong to, and team plans cost money.
- Gluing five tools together means five logins, five subscriptions and nothing that connects.
The solution
AshiHQ is a single app with two sides:
- The public portfolio at ashike.in: fast, animated, and fully editable from the admin, with a case-study CMS.
- A private admin (just for me, with two-factor login) for the job hunt, freelance clients and projects, project docs and an encrypted credential vault.
A portfolio I can update in minutes
- Every section is editable from the admin: profile, stack, services, experience, projects, skills and education. No code changes.
- Multiple résumés, with one marked public as the portfolio's download.
- Motion design done carefully: text that reveals as you scroll, a statement that lights up word by word, marquees, tilt cards and magnetic buttons. All of it respects "reduce motion" settings.
- Brand icons on every tech chip, lightened automatically so they stay readable on the dark theme.
A case-study CMS that publishes itself
- A Markdown editor with live preview, image upload, Mermaid diagrams, and a template with an eight-part structure (problem → why existing solutions failed → solution → features → architecture → challenges → outcome → lessons).
- Case-study pages with a table of contents that follows your scroll, highlights, a technology list and related studies.
- Publishing triggers a site rebuild automatically. The site is a static export for speed, so each new case study gets its own pre-rendered page with proper link previews on WhatsApp and LinkedIn within about two minutes. Until then, a fallback page loads it live.
A job hunt that finds jobs for me
- Job tracker: status pipeline (wishlist → applied → screening → interview → offer), follow-up reminders, and response rate per résumé. I can see whether my Laravel, FDE or React résumé is getting replies.
- Role profiles: for each target role, the résumé to use, search phrases, the skills to score on, words to skip, cities (or Remote), applications per day and a minimum match score.
- Daily discovery from job APIs (Adzuna, Jooble). Each job is scored against every profile: points for the skills it mentions and for its title matching the role. It goes to the profile it fits best, up to that day's limit.
- Indeed, through Claude: a scheduled Claude task searches Indeed through the official connector every morning and writes a file that I import with one click. Jobs are de-duplicated by title, company and city, because Indeed's ids change between searches.
- A review queue: each match shows its score, the matched skills, salary and the résumé to use. Open job → apply → Mark applied logs it in the tracker automatically.
- LinkedIn and Naukri get one-click saved searches (last 24 hours, per role and city). Those platforms don't allow automated applying, so AshiHQ never submits applications for me; it only finds, ranks and records them.
Freelance projects with real numbers
- Clients and projects with budgets, payments, deadlines, live URLs (website, API, admin) and Git clone URLs.
- Paid add-ons (quoted → approved → delivered), counted in what's due only once the client has agreed.
- Lifetime earnings and money still to collect on the dashboard.
- Project docs: upload a project's own planning folder (architecture.md, task.md, issues.md…). AshiHQ reads it into a visual overview: tasks done, the current phase, open issues by severity, test runs and Mermaid diagrams. The screenshot is AshiHQ's own build plan, documented inside AshiHQ.
A vault where the server never sees a password
Client logins are stored zero-knowledge:
- Encrypted in the browser with a key derived from a master password (PBKDF2-SHA256, 600,000 iterations → AES-256-GCM). The server only ever stores ciphertext.
- Templates per service (Zoho Mail, GoDaddy, Cloudflare R2, AWS…) so every field lands in the right place.
- Linked to the client and project it belongs to, or kept as personal, with filters for each.
- The master password can be changed by re-encrypting everything in the browser; there's no server-side reset, by design.
Key features
- Editable portfolio with motion design and multiple résumés
- Case-study CMS: Markdown, images, Mermaid, table of contents, automatic site rebuild on publish
- Job tracker with follow-ups and response rate per résumé
- Job discovery: role profiles, match scoring, daily limits, review queue
- Multiple sources: Adzuna and Jooble APIs, daily Indeed import through Claude, LinkedIn and Naukri saved searches
- Clients and projects with links, Git URLs, paid add-ons and lifetime earnings
- Project docs overview built from Markdown planning files
- Zero-knowledge credential vault with service templates
- Two-factor login, mobile-friendly admin
Technical architecture
- Front end: Next.js 16 (App Router) as a static export on Vercel, with React 19, Tailwind CSS v4 and lucide icons. The admin is the same app, so the whole site is fast and served from Vercel's network.
- API: Laravel 12 with Sanctum tokens and TOTP two-factor authentication, on Hostinger with MySQL. Rate-limited public endpoints serve the portfolio and case studies.
- Fresh content on a static site: pages are pre-built; anything newer is served by a fallback page (Vercel rewrites); publishing calls a Vercel deploy hook so the next build includes it.
- Job discovery: a scheduled Laravel command; sources behind a common interface; per-source call budgets so free API tiers (e.g. Adzuna's 25-call trial) can't be spent in one run; one country-wide search per profile, filtered to my cities (Bangalore/Bengaluru, Kochi/Cochin…).
- Quality: feature tests for every module (37 at the time of writing). Tests block all outside requests, so they can never touch real API keys.
Challenges
- A static site that still feels live. Static export makes the portfolio fast, but new case studies 404'd until the next deploy, and link previews were generic. A fallback page, Vercel rewrites and an automatic deploy hook on publish fixed both.
- Encryption you can actually live with. Zero-knowledge means no "forgot password". The vault makes that explicit at setup, derives keys with 600k PBKDF2 iterations, and supports changing the master password by re-encrypting in the browser.
- Free API tiers. My first discovery design used 36 Adzuna calls per run, more than the entire 25-call trial. Switching to one broad search per profile plus server-side call budgets brought it to 3 calls a day.
- Messy job data. Indeed's ids and short links change between searches, so de-duplication uses title + company + city. Jooble keys only work for the country site that issued them, so a jooble.org key returns US jobs.
- Small bugs with big effects: a query alias that clashed with a model accessor showed "0 active projects", and add-ons on lead-stage projects weren't counted. Each fix got a regression test.
The outcome
- One app for my professional life: portfolio, case studies, job hunt, clients, projects, docs and credentials.
- Publishing is a two-minute job: write in the admin, press publish, and the site rebuilds with proper link previews. Six case studies so far, including this one.
- A focused job search: three tailored résumés, matches scored and queued each morning, and every application recorded with the résumé that was sent.
- Client credentials out of chats and notes, encrypted so that even a server breach wouldn't reveal them.
- A living example of how I work: typed, tested, documented, and secured. AshiHQ even holds its own build plan and issue list.
What this means for other businesses
The same building blocks fit many small businesses and freelancers:
- A CMS shaped around your content (case studies, menus, listings) rather than a generic template.
- Automation that does the boring part: finding leads, scoring them and lining them up for a human decision, without breaking any platform's rules.
- Zero-knowledge storage for anything sensitive your team shares: logins, keys, client data.
- One tool instead of five subscriptions, built around how you actually work.
Juggling too many tools to run your work? I can build you one that fits.