because I got bored of customising my CV for every job
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs(roadmap): update roadmap and fix docs build config

+53 -29
+42 -23
apps/docs/content/docs/roadmap.md
··· 13 13 - [x] Add theme selection (professional, creative, minimal) 14 14 - [x] Support for multiple CV formats (chronological, functional, hybrid) 15 15 - [x] Navigation active state 16 - - [ ] Multiple template rendering formats (Liquid, LaTeX, Handlebars) 17 - - [ ] Template engine abstraction layer 18 - - [ ] Custom template syntax support 16 + - [x] Template engine abstraction layer (`@cv/cv-renderer` with `TemplateEngine` interface) 17 + - [x] Handlebars template engine 18 + - [ ] Additional template engines (Liquid, LaTeX) 19 19 20 20 - [ ] **Content Management** 21 21 ··· 26 26 - [ ] Version history and rollback 27 27 28 28 - [ ] **Export & Sharing** 29 - - [ ] PDF export with high-quality rendering 30 - - [ ] Multiple file format support (PDF, DOCX, HTML) 29 + - [x] PDF export via print stylesheet 30 + - [ ] High-fidelity PDF rendering (server-side) 31 + - [ ] Multiple file format support (DOCX, HTML) 31 32 - [ ] Shareable CV links 32 33 - [ ] QR code generation for CV sharing 33 34 - [ ] Social media integration ··· 36 37 37 38 - [ ] **AI-Powered Enhancements** 38 39 40 + - [x] AI-powered CV parsing (extract structured data from uploaded CVs) 41 + - [x] Multi-provider AI registry (Anthropic, OpenAI, llama.cpp) 42 + - [x] AI call logging and monitoring (admin module) 43 + - [x] User AI preference settings (model/provider selection during onboarding) 39 44 - [ ] AI content suggestions and improvements 40 45 - [ ] Keyword optimization for ATS systems 41 46 - [ ] Skills gap analysis ··· 52 57 - [ ] **Onboarding & Tutorials** 53 58 54 59 - [x] Interactive CV creation wizard 55 - - [ ] Step-by-step guidance system 60 + - [x] Multi-step onboarding flow (profile, CV upload, education, career history, AI preferences, review) 56 61 - [ ] Sample CV library 57 62 - [ ] Video tutorials and help center 58 63 ··· 93 98 - [ ] Vacancy search and filtering 94 99 95 100 - [ ] **Employee Management** 96 - - [ ] Bulk employee import/export 97 101 - [x] Employee profile management 102 + - [x] Multi-profile support (users can maintain multiple profiles) 98 103 - [x] Skills inventory and tracking 104 + - [x] Employee directory with search and filtering 105 + - [ ] Bulk employee import/export 99 106 - [ ] Performance review integration 100 - - [x] Employee directory with search and filtering 107 + 108 + - [ ] **Data Import** 109 + - [x] File-based CV import with AI parsing 110 + - [ ] GDPR ZIP import (LinkedIn data export) 111 + - [x] Event-driven import pipeline (data-import module with listeners) 112 + - [ ] Bulk CSV/Excel import 101 113 102 114 ### HR Analytics & Reporting 103 115 ··· 147 159 - [ ] Backup and disaster recovery 148 160 149 161 - [ ] **Access Control** 162 + - [x] Admin role and admin-only resolvers 163 + - [x] Entity-level authorization policies (14/14 entities covered) 150 164 - [ ] Granular permission system 151 165 - [ ] Multi-factor authentication (MFA) 152 166 - [ ] Session management and timeout 153 167 - [ ] IP whitelisting and restrictions 154 - - [ ] Admin console for system management 168 + - [x] Admin console for system management 155 169 156 170 --- 157 171 ··· 221 235 222 236 ### Core Systems 223 237 224 - - [ ] **Authentication System** 238 + - [x] **Authentication System** 225 239 - [x] JWT-based authentication 226 240 - [x] Refresh token mechanism 227 241 - [x] User session management 228 242 229 - - [ ] **Database System** 243 + - [x] **Database System** 230 244 - [x] PostgreSQL database setup 231 245 - [x] Prisma ORM integration 232 246 - [x] Database migrations 233 247 234 - - [ ] **GraphQL API** 248 + - [x] **GraphQL API** 235 249 - [x] Apollo Server implementation 236 250 - [x] GraphQL schema design 237 251 - [x] Query and mutation resolvers 238 252 239 - - [ ] **Frontend Application** 253 + - [x] **Frontend Application** 240 254 - [x] React application setup 241 255 - [x] TypeScript configuration 242 - - [x] Modern UI components 256 + - [x] Modern UI components (`@cv/ui` design system) 243 257 244 - - [ ] **Docker Infrastructure** 245 - - [x] Containerization setup 258 + - [x] **Docker Infrastructure** 259 + - [x] Containerization setup (per-app Dockerfiles + shared base image) 246 260 - [x] Health checks configuration 247 261 - [x] Multi-service orchestration 262 + - [x] GPU passthrough support (NVIDIA + Metal) 248 263 249 264 - [ ] **Testing Infrastructure** 250 - - [ ] E2E testing setup 251 - - [ ] Integration testing 252 - - [ ] Test coverage 265 + - [x] E2E testing setup (9 e2e spec files) 266 + - [x] Integration testing (auth, CV upload, pagination, GraphQL) 267 + - [x] Unit testing with Vitest 268 + - [ ] Client-side test coverage 269 + - [ ] Playwright E2E tests (planned) 253 270 254 - - [ ] **Code Quality** 271 + - [x] **Code Quality** 255 272 - [x] Biome linting configuration 256 273 - [x] TypeScript strict mode 257 274 - [x] Code formatting standards 275 + 276 + - [ ] **CI/CD** 277 + - [x] Platform-agnostic CI pipeline (`ci/pipeline.ts`) 278 + - [ ] Automated deployment 279 + - [ ] Blue-green deployment strategy 258 280 259 281 - [ ] **Email System** 260 282 - [ ] Email service integration (SendGrid, AWS SES, SMTP) ··· 275 297 - [ ] Performance monitoring and alerting 276 298 277 299 - [ ] **DevOps & Deployment** 278 - - [ ] CI/CD pipeline optimization 279 - - [ ] Automated testing (unit, integration, e2e) 280 300 - [ ] Infrastructure as Code (IaC) 281 - - [ ] Blue-green deployment strategy 282 301 - [ ] Monitoring and logging solutions 283 302 284 303 ### Security & Compliance
+1
apps/docs/package.json
··· 15 15 "@catppuccin/palette": "^1.4.0", 16 16 "@cv/routing": "*", 17 17 "@cv/ui": "*", 18 + "@cv/utils": "*", 18 19 "@mdx-js/react": "^3.1.1", 19 20 "@mdx-js/rollup": "^3.1.1", 20 21 "@types/mdx": "^2.0.13",
+9 -6
apps/docs/src/config/env-interpolation-remark-plugin.ts
··· 1 - import type { Root, Text } from "mdast"; 1 + import type { Node, Root, Text } from "mdast"; 2 2 import type { Plugin } from "unified"; 3 - import { visit } from "unist-util-visit"; 4 3 import { ENV_VARS } from "./env.config"; 5 4 5 + const visitTextNodes = (node: Node, fn: (text: Text) => void): void => { 6 + if (node.type === "text") return fn(node as Text); 7 + if ("children" in node) 8 + (node as Root).children.forEach((child) => visitTextNodes(child, fn)); 9 + }; 10 + 6 11 /** 7 12 * Remark plugin to interpolate environment variables in markdown 8 13 * Replaces {{VARIABLE_NAME}} with actual values from ENV_VARS 9 14 */ 10 15 export const envInterpolationPlugin: Plugin<[], Root> = () => (tree: Root) => { 11 - visit(tree, "text", (node: Text) => { 12 - if (!node.value) { 13 - return; 14 - } 16 + visitTextNodes(tree, (node) => { 17 + if (!node.value) return; 15 18 16 19 const interpolated = node.value.replace( 17 20 /\{\{(\w+)\}\}/g,
+1
apps/docs/vite.config.ts
··· 30 30 alias: { 31 31 "@": path.resolve(__dirname, "./src"), 32 32 "@cv/routing": path.resolve(__dirname, "../../packages/routing/src"), 33 + "@cv/utils": path.resolve(__dirname, "../../packages/utils/index.ts"), 33 34 }, 34 35 }, 35 36 server: {