TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Keep a diary of your professional wins and turn it into a tailored resume.
ProductivityTypeScript · CSSGitHub @mido4499OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Log your wins as they happen. Turn them into a tailored, one-page resume in under a minute.
Taken from the repository README
Loading the full README.
Read the full README ↗Log your wins as they happen. Turn them into a tailored, one-page resume in under a minute.
Try it live at rolediary.com →
You shipped a feature that cut load times in half. You led the migration nobody else wanted to touch. You onboarded three new hires.
Eighteen months later you're updating your resume, staring at a blank bullet point, and you can't remember any of it.
Role Diary fixes that. It's a work diary built for resumes. Jot down what you did while it's fresh, and when the right job comes along, Role Diary reads your diary and the job posting, then writes a resume that matches the role.
1. Add your roles 2. Log your wins 3. Generate
┌──────────────────┐ ┌──────────────────────┐ ┌───────────────────────┐
│ Software Intern │ │ Oct 14 · Cut CI time │ │ Paste a job posting │
│ Acme Corp │ ───▶ │ from 12 to 4 min by │ ───▶ │ → get a tailored, │
│ Jun 2025 – Now │ │ caching Docker layers│ │ one-page .docx │
└──────────────────┘ └──────────────────────┘ └───────────────────────┘
Role Diary is a single Next.js 16 app (App Router). Server components and route handlers talk to PostgreSQL through Prisma, and resume generation calls the Claude API with a strict JSON schema.
flowchart LR
U[Browser] -->|React 19 UI| N[Next.js 16 App Router]
subgraph Server
N --> A[Auth.js v5<br/>JWT sessions, bcrypt]
N --> R[Route handlers<br/>/api/*]
R --> RL[Rate limiter<br/>Postgres-backed]
R --> G[Generation<br/>lib/generation.ts]
G --> T[Template engine<br/>lib/templates → docx]
end
A --> DB[(PostgreSQL<br/>via Prisma 7)]
R --> DB
RL --> DB
G -->|structured JSON output| C[Claude API]
R -->|verification & reset emails| E[Resend]
T -->|.docx download| U
POST /api/generate checks your session, validates the input (with size caps), and makes sure your email is verified.enum, so the model can only use categories the template knows how to render.fitToBudget trims any bullets over the template's limit, starting from the least relevant ones.render() merges in your name, contact details, and education, then builds a .docx with the docx library. The file streams straight back to your browser.User ──┬── Experience ── Contribution (diary entry)
├── Education
├── VerificationToken (hashed)
└── PasswordResetToken (hashed)
RateLimit (fixed-window counters keyed by IP / user)
Deleting a user cascades to everything they own.
INSERT … ON CONFLICT upsert.AUTH_URL in production, never from the request's Host header, so a forged host can't point reset links at someone else's site.app/
api/ Route handlers: auth, account, experiences, contributions, generate
dashboard/ Signed-in app: diary, experiences, generate, account
components/ UI, onboarding flow, account settings
lib/
generation.ts Claude prompt + JSON schema
templates/ Resume templates (docx renderers + page budgets)
rateLimit.ts Postgres-backed rate limiting
aiPrompt.ts "Bring your own AI" export prompt
diaryExport.ts Full data export
prisma/ Schema and migrations
auth.ts Auth.js configuration
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router), React 19, TypeScript |
| Styling | Tailwind CSS 4 |
| Auth | Auth.js (NextAuth v5), bcryptjs |
| Database | PostgreSQL, Prisma 7 with the pg driver adapter |
| AI | Anthropic Claude API with structured outputs |
| Documents | docx |
| Resend |
Prerequisites: Node.js 20+, a PostgreSQL database, and an Anthropic API key.
git clone https://github.com/mido4499/rolediary.git
cd resumeresolve
npm install # also generates the Prisma client
cp .env.example .env # then fill in the values below
npm run db:migrate # apply migrations to your database
npm run dev # http://localhost:3000
| Variable | Purpose |
|---|---|
DATABASE_URL | Postgres connection string |
AUTH_SECRET | Signs session cookies. Generate one with npx auth secret |
AUTH_URL | Public site address (required in production), e.g. https://rolediary.com |
ANTHROPIC_API_KEY | Used for resume generation |
RESEND_API_KEY | Sends verification and reset emails. Optional locally: without it, the links are printed to the console |
EMAIL_FROM | Sender address on a domain verified in Resend |
Templates live in lib/templates/. A template is an object with:
skillCategories: the skill groups it renders, in order ("Others" is added automatically)budget: how many bullets, and how many characters per bullet, fit on one pagerender(data): returns a docx DocumentRegister it in lib/templates/index.ts and it appears in the generate form.
Issues and pull requests are welcome. If you're planning a larger change, open an issue first so we can talk it through.
MIT © Ahmed Shaheen
Stop forgetting your best work. Start your diary →