Skip to content

Latest commit

 

History

History
462 lines (348 loc) · 15.9 KB

File metadata and controls

462 lines (348 loc) · 15.9 KB

OpenResume Roadmap

OpenResume is a privacy-first CV and resume builder built for ordinary users: open the site, fill structured modules, preview a professional document, save locally, export a backup, and print to PDF.

The current repository contains a browser-only vanilla MVP. That MVP proved the core workflow, but it is not the long-term implementation. OpenResume is an openElement product and must become a full openElement dogfood application before feature expansion.

Product Vision

OpenResume should become a lightweight, trustworthy alternative to heavyweight resume platforms:

  • No account required for the default experience.
  • No cloud database required before v1.0.
  • User data stays in the browser unless the user explicitly exports or shares it.
  • The first screen is the actual editor, not a marketing landing page.
  • CVs and resumes are edited through plain-language modules, not source files, JSX, Markdown, or schema objects.
  • The printed PDF should be good enough for real academic and professional use.

The first stable release should support three primary users:

  • Academic users preparing academic CVs for university roles.
  • Teaching-focused candidates preparing teaching CVs.
  • General professional users preparing compact industry resumes.

Current State

The current MVP includes:

  • A static browser editor.
  • A structured JSON document model.
  • A left-side editor and right-side A4 preview.
  • Module visibility, module ordering, item editing, item ordering, and item deletion.
  • Browser-local saving with localStorage.
  • JSON import/export.
  • Print/PDF output.
  • Playwright coverage for load, edit/save/restore, import/export, and print media behavior.

The current implementation is temporary:

  • It is written as vanilla HTML/CSS/JS.
  • It uses npm only for tests and local serving.
  • It is not yet an openElement app.
  • It should be replaced directly, not preserved as a legacy implementation.

Non-goals Before v1.0

The following are intentionally out of scope before v1.0:

  • Account system.
  • Cloud database.
  • Multi-user collaboration.
  • Server-side editing or server-side CV persistence.
  • Paid plans or billing.
  • React, Vue, Svelte, or another UI framework.
  • Keeping a legacy vanilla app after the openElement rewrite.
  • Merging OpenResume into the openElement monorepo.

OpenResume stays an independent repository under open-element, while using openElement as its application framework.

Milestones

v0.1.0 - openElement Rewrite

Goal: replace the temporary vanilla implementation with an openElement app.

Required outcomes:

  • Replace the repository structure with Deno, Vite, and openElement: deno.json, vite.config.ts, app/routes, app/islands, app/components, and app/data.
  • Implement the editor as an openElement island.
  • Implement the print-ready preview as openElement-rendered UI.
  • Preserve existing MVP behavior: structured editing, local save, JSON import/export, module management, and print/PDF.
  • Remove the vanilla runtime files instead of moving them to legacy/.
  • Update Cloudflare Pages instructions to build with deno task build and serve dist.
  • Keep the repository independent from the openElement monorepo.

Acceptance criteria:

  • deno task build passes.
  • deno lint passes.
  • deno fmt --check passes.
  • Playwright E2E passes for load, edit/save/restore, import/export, and print media behavior.
  • The production build can be deployed by Cloudflare Pages from dist.

v0.2.0 - Ordinary-user Editor UX

Goal: make the product usable by non-technical users without reading documentation first.

Required outcomes:

  • Replace internal language such as "section", "item", and "schema" with ordinary product language such as "module", "entry", "publication", and "reference".
  • Add a first-run template chooser: Academic CV, Teaching CV, and Industry Resume.
  • Add a clear edit flow for candidate details, contact details, profile, education, appointments, teaching, publications, awards, service, skills, and references.
  • Add plain empty states for every module.
  • Add "clear example content", "restore template", and "save now" actions.
  • Add visible save state: unsaved, saved, auto-saved timestamp, and imported draft state.
  • Add recovery for accidental item deletion, at minimum an undo affordance for the most recent delete.

Acceptance criteria:

  • A first-time user can create a usable CV without editing JSON, Markdown, JSX, or any source file.
  • Existing E2E coverage still passes.
  • New E2E covers template selection and clearing sample content.

v0.3.0 - Print Templates and PDF Quality

Goal: make printed output professionally usable.

Required outcomes:

  • Add at least three print templates: Classic Academic, Modern Two-column, and Compact Resume.
  • Support A4 and Letter page formats.
  • Support basic style controls: accent color, font family, text scale, margin density, and compact mode.
  • Add print-only CSS that hides all editor controls and produces stable page dimensions.
  • Add print preview warnings for likely issues: visible placeholders, empty required fields, very long contact values, invalid email format, and page overflow risk.
  • Ensure long academic content can flow across pages without breaking headings and entries in obviously bad places.

Acceptance criteria:

  • Chrome and Edge print preview show only the CV/resume surface.
  • A4 output is usable for academic CVs.
  • Letter output is usable for industry resumes.
  • Playwright verifies print media layout at desktop dimensions.

v0.4.0 - Local Data Reliability and Privacy

Goal: make user data behavior predictable while keeping the product backend-free.

Required outcomes:

  • Define .openresume.json as the official exported data format.
  • Version the data model.
  • Add a migration function for older saved documents.
  • Keep localStorage as the default persistence layer.
  • Add a clear privacy statement in the app: data is stored in the browser by default and is not uploaded by OpenResume.
  • Add import validation for malformed JSON, wrong format, unsupported future versions, and missing required fields.
  • Add explicit reset flows: reset current document, reset to selected template, and import from backup.
  • Add export reminders for users who have edited significantly without backing up.

Acceptance criteria:

  • Importing invalid JSON never corrupts the current CV.
  • Saved documents survive page reloads.
  • Exported .openresume.json files can restore an equivalent document.
  • E2E covers invalid import, reset, and migration from a previous version.

v0.5.0 - Academic CV Depth

Goal: make OpenResume genuinely useful for academic CVs, not just generic resumes with academic labels.

Required outcomes:

  • Split publications into academic categories: journal articles, book chapters, conference proceedings, reports, work in progress, and under-review manuscripts.
  • Add dedicated modules for: grants and funding, teaching experience, supervision, academic service, professional memberships, invited talks, public engagement, and research methods.
  • Add academic profile fields: ORCID, Google Scholar, institutional profile, research areas, languages, and right-to-work note.
  • Add academic CV templates for PhD, postdoc, lecturer, and teaching-focused roles.
  • Support moving academic-only modules into the sidebar or main column depending on template.

Acceptance criteria:

  • A linguistics PhD can create a credible university-facing academic CV.
  • A teaching-focused candidate can create a teaching CV without publication emphasis.
  • A postdoc candidate can emphasize publications, methods, grants, and research pipeline.

v0.6.0 - Industry Resume Expansion

Goal: support non-academic resumes without weakening academic CV support.

Required outcomes:

  • Add Industry Resume templates.
  • Add modules for skills, projects, certifications, work experience, portfolio, and selected achievements.
  • Add one-page resume mode.
  • Add compact bullet editing.
  • Add optional academic-to-industry transformations: publications become selected writing/research outputs, teaching becomes facilitation/training, service becomes leadership or committees.
  • Let users hide academic-only modules quickly when switching to an industry resume.

Acceptance criteria:

  • One data model can generate both an Academic CV and an Industry Resume.
  • The one-page template can produce a credible single-page resume.
  • E2E covers switching templates without losing source data.

v0.7.0 - Accessibility and Internationalization

Goal: meet the baseline quality expected of a public web tool.

Required outcomes:

  • Support English and Chinese UI.
  • Ensure all form fields have accessible labels.
  • Ensure all buttons have clear accessible names.
  • Ensure keyboard users can complete the primary edit flow.
  • Add visible focus states.
  • Add screen-reader-friendly status updates for save, import, export, and reset.
  • Avoid UI text overlap on common desktop and tablet viewports.
  • Add basic accessibility checks to E2E.

Acceptance criteria:

  • The main editor can be used with keyboard navigation.
  • Language switching does not corrupt saved data.
  • The app has no known blocking accessibility issue for core editing and printing flows.

v0.8.0 - Product Polish

Goal: make OpenResume feel like a finished product instead of a technical demo.

Required outcomes:

  • Add a small product shell around the editor without turning the first screen into a marketing page.
  • Add first-run onboarding: choose template, fill basic profile, enter editor.
  • Add a print/export checklist.
  • Add better error states for local storage disabled, invalid import, unsupported document version, and failed template load.
  • Add in-app help for modules that are often misunderstood: profile, publications, teaching, service, and references.
  • Add browser support notes.

Acceptance criteria:

  • First-time, returning, and import-from-backup users all have clear flows.
  • Error states explain what happened and what the user can do next.
  • The app still opens directly into a usable editing experience.

v0.9.0 - Release Candidate Hardening

Goal: freeze v1 scope and remove quality risk.

Required outcomes:

  • Freeze data model v1.
  • Freeze public routes and deployment shape.
  • Add GitHub Actions for format, lint, build, and E2E.
  • Test Chrome and Edge as primary browsers.
  • Smoke test Firefox for basic editing and print media.
  • Document Cloudflare Pages deployment.
  • Document data privacy and backup behavior.
  • Review all templates for placeholder leakage and professional quality.

Acceptance criteria:

  • Two consecutive release candidate runs pass without P0 or P1 issues.
  • No known data-loss issue remains.
  • No known print-blocking issue remains.
  • The repository can be cloned, built, tested, and deployed from documented commands.

v1.0.0 - Public Stable

Goal: release a stable public OpenResume at cv.openelement.org.

Required outcomes:

  • The app is implemented with openElement.
  • Cloudflare Pages serves the production build.
  • Academic CV, Teaching CV, and Industry Resume templates are available.
  • Local save, JSON backup, import restore, template switching, and print/PDF are stable.
  • Data privacy is explicit and accurate.
  • Documentation explains what OpenResume does and does not do.
  • Tests cover core editing, persistence, import/export, print, and deployment assumptions.

Acceptance criteria:

  • A user can create, save, back up, restore, and print a CV without account creation.
  • A user can understand that data stays local by default.
  • A maintainer can safely ship patches without breaking the core workflow.

Data Model Roadmap

The document model should remain structured and versioned.

Required model direction:

  • version: data model version.
  • profile: candidate identity, headline, location, links, and summary.
  • contact: editable contact rows.
  • documents: one or more generated views, such as academic CV or industry resume.
  • modules: reusable source content blocks.
  • templates: print and layout selection.
  • settings: page size, theme, density, and locale.

Versioning rules:

  • v0.1 can preserve the current JSON shape if needed.
  • v0.4 must define .openresume.json.
  • v0.9 must freeze v1 model semantics.
  • Every breaking model change must include a migration path before v1.

UX Roadmap

The editor should be optimized for ordinary users:

  • Use domain language instead of implementation language.
  • Keep the editor and preview visible together on desktop.
  • Use a focused single-column editor on mobile and tablet.
  • Treat templates as starting points, not separate products.
  • Make destructive actions recoverable or clearly confirmed.
  • Keep print and export actions visible.
  • Never require users to open source files.

The UX should avoid:

  • Raw JSON editing as a primary path.
  • Markdown authoring as a primary path.
  • JSX or source-code editing.
  • Hidden save behavior without status feedback.

Print/PDF Roadmap

Print quality is a core product requirement.

The print system must:

  • Hide all editor controls in print media.
  • Support A4 and Letter.
  • Avoid text clipping and obvious overlap.
  • Keep section headings with nearby content where possible.
  • Warn users about placeholders and empty fields before printing.
  • Support academic multi-page documents and compact one-page resumes.

The product should treat browser print-to-PDF as the default export path before adding any server-side PDF generation.

Testing and Quality Gates

Minimum gates for every release:

  • Format check.
  • Lint.
  • Build.
  • E2E for editor load.
  • E2E for editing and save/restore.
  • E2E for JSON import/export.
  • E2E for print media.

Additional gates by maturity:

  • v0.3: print template checks.
  • v0.4: invalid import and migration checks.
  • v0.7: accessibility checks.
  • v0.9: GitHub Actions on every PR.
  • v1.0: browser smoke matrix.

Deployment Roadmap

Deployment target:

  • Repository: open-element/OpenResume
  • Production domain: cv.openelement.org
  • Hosting: Cloudflare Pages

Current MVP deployment can serve static files from the repository root, but the openElement rewrite changes deployment to:

  • Build command: deno task build
  • Output directory: dist

Deployment requirements before v1:

  • Document Cloudflare Pages settings.
  • Add production smoke test after deployment.
  • Keep production domain independent from openelement.org main docs.
  • Avoid hard-coding production domain into local development.

Project Governance

OpenResume should stay small and disciplined before v1.

Rules:

  • Keep OpenResume as an independent repository.
  • Use openElement as the application framework.
  • Do not introduce another UI framework.
  • Do not add backend persistence before v1.
  • Do not add account flows before v1.
  • Treat data loss and broken print output as high-priority defects.
  • Every milestone should ship with tests for persistence and print behavior.

Issue categories:

  • ux: ordinary-user editing improvements.
  • template: document template and module work.
  • print: PDF and print layout work.
  • data: local save, import/export, and migration work.
  • a11y: accessibility work.
  • i18n: localization work.
  • dogfood: openElement adoption and framework integration.
  • deployment: Cloudflare Pages and production rollout.

v1.0 Acceptance Criteria

OpenResume reaches v1.0 when all of the following are true:

  • The implementation is an openElement application.
  • cv.openelement.org is deployed from Cloudflare Pages.
  • Users can create Academic CV, Teaching CV, and Industry Resume documents.
  • Users can save locally, export .openresume.json, import it back, reset, and print to PDF.
  • The app clearly explains that data stays in the browser by default.
  • The app has no known P0/P1 editing, persistence, import/export, or print defects.
  • The repository has documented local development, testing, and deployment commands.
  • CI runs format, lint, build, and E2E gates.
  • The public product is useful without accounts, cloud storage, or server-side PDF generation.