========= Changelog ========= Unreleased ---------- 0.3.0 - 2026-06-21 ------------------ Behavior Changes ^^^^^^^^^^^^^^^^ * The CV page (``//cv/``) is now ``GET``-only and returns HTTP 405 for non-``GET`` requests; previously it had no method restriction Features ^^^^^^^^ * Add a ``just docs-serve`` shortcut with a configurable port for building and serving the Sphinx documentation locally * Let installed apps register their own resume pages: ``django_resume`` now autodiscovers a ``resume_pages`` module from every installed app on startup, so a third-party app can add an editable, themed page (with its own route and URL name) without modifying ``django_resume`` or adding a migration. The bundled example project demonstrates this with an editable ``PortfolioPage`` at ``//portfolio/``. See :doc:`guide/creating_page_plugins`. * Generate the per-resume page links on the resume overview from the page registry instead of hard-coding them, so every registered page (including third-party pages such as the example Portfolio page) appears in navigation automatically. Pages set ``nav_title`` to be listed and can override ``is_visible`` for state-dependent links; the ``page_nav`` template tag renders the list anywhere. * Give page navigation explicit, deterministic ordering and grouping: pages set ``nav_order`` (lower sorts first; a stable sort keeps registration order for ties) and ``nav_group`` (a group label). The new ``{% page_nav_groups %}`` template tag renders links bucketed by group, and the resume overview uses it, so a third-party page can place itself between the built-ins without editing a template. See :doc:`guide/creating_page_plugins`. * Let a page select its sections by *capability* in addition to by name or ``"__all__"``: section plugins advertise a ``capabilities`` tuple and a page sets ``section_names = by_capability("portfolio")`` to include every matching plugin (``match="any"`` by default, or ``match="all"``). The built-in content plugins are tagged, and the example Portfolio page now selects its sections by capability. See :doc:`guide/creating_page_plugins`. * Fall back to the ``plain`` theme when a resume's active theme does not ship a page template, instead of raising ``TemplateDoesNotExist``. The fallback is coherent -- the page frame and its section fragments both render through ``plain`` -- and it is per template, so a theme that provides only some page templates falls back only for the missing ones. * Discover resume pages from separately distributed packages via ``importlib.metadata`` entry points (the ``django_resume.pages`` group), in addition to installed apps' ``resume_pages`` modules. A package that is not in ``INSTALLED_APPS`` can ship a page (a ``ResumePage`` subclass or a registering callable) that gets a route on startup, before the URLconf freezes. See :doc:`guide/creating_page_plugins`. Refactor ^^^^^^^^ * Serve the cover/detail, CV, and permission-denied pages through a registered ``ResumePage`` page registry instead of hard-coded views; URLs, URL names, and behavior are otherwise unchanged 0.2.0 - 2026-05-12 ------------------ Breaking Changes ^^^^^^^^^^^^^^^^ * Removed the experimental database-backed plugin system * Removed the plugin CRUD views, templates, signals, and database settings tied to DB plugins * Simplified plugin generation to produce filesystem plugin artifacts instead of database rows * Reset the app migration history around this removal; existing installs should treat this as a breaking reset rather than an in-place upgrade Features ^^^^^^^^ * Add a colorized ``just loc`` workflow with repo-area summaries for ``src``, ``tests``, and other tracked code * Make bare ``just`` print an overview of the available recipes instead of running ``check`` by default * Add a ``just serve-example`` shortcut for starting the bundled example Django project * Redirect the example project's root URL to the admin login for anonymous users and the resume list for authenticated users without changing the reusable app's URL behavior * Add HTMX boosting to owner navigation links between the resume list, cover, CV, and editable 403 page * Document the maintainer release checklist, including version bumps, changelog rollover, validation, artifact checks, publishing, and tagging Fixes ^^^^^ * Clarify that installations add ``django_resume`` to ``INSTALLED_APPS`` and do not need django-htmx for the built-in editing views * Add ``nh3`` as a runtime dependency to sanitize rendered markdown HTML before plugin output is marked safe * Block dangerous link protocols in rendered markdown, including percent-encoded scheme variants * Route the About plugin through the same sanitized markdown rendering path as the other text-heavy plugins * Use block-level wrappers for plain-theme rich-text fragments so sanitized headings and other block content render as valid HTML * Lock resume rows during plugin-data writes and restrict saves to the ``plugin_data`` field to avoid lost updates across concurrent edits * Generate CV access tokens with the ``secrets`` module instead of the non-cryptographic ``random`` PRNG * Remove leftover demo validation and stray debug prints from plugin item forms * Make plugin data removal commands update resume JSON data in a single atomic bulk operation * Reject unsafe plugin names in filesystem management commands and keep generated and deleted paths contained inside the expected plugin directories * Use prefixed admin readonly field names for plugin links to avoid method-name collisions * Keep plugin inline URLs in sync when plugins are registered or unregistered dynamically * Harden CV token access by using constant-time token comparison, expiring timestamped tokens after ``DJANGO_RESUME_TOKEN_TTL``, and setting ``Referrer-Policy: no-referrer`` on token-protected CV responses * Use Django's in-memory SQLite test database by default so concurrent pytest invocations do not collide on a shared file with readonly-database errors 0.1.14 - 2025-12-07 ------------------- Fixes ^^^^^ * Fixed animated underline on links breaking when text wraps to multiple lines 0.1.13 - 2025-02-16 ------------------- Features ^^^^^^^^ * Preview images for the README.rst * Links to the sample CV and Resume in the documentation * #3 How to run the example project 0.1.12 - 2025-02-15 ------------------- Features ^^^^^^^^ * Added some bits on how to build the documentation Fixes ^^^^^ * #4 If no token is required, the CV link is shown on the cover * need to build wheel and sdist separately (fixed documentation) 0.1.11 - 2025-01-27 ------------------- Features ^^^^^^^^ * #2: Add some documentation * Minimal installation instructions * Changelog moved to docs and was converted to reStructuredText * #3: Context for few shot learning to write plugins from a prompt * #3: Being able to store plugins in the database * Minimal CSS to enable cross-fade view transitions on navigation via links Fixes ^^^^^ * Fixed building wheel * Fixed an styling issue with the about plugin title 0.1.10 - 2024-12-06 ------------------- Features ^^^^^^^^ * Make the title of the about section on the CV editable Fixes ^^^^^ * Fix 2 playwright tests 0.1.9 - 2024-11-09 ------------------ Refactor ^^^^^^^^ * Simplify some image recognition code 0.1.8 - 2024-11-09 ------------------ Refactor ^^^^^^^^ * Move definition of the background pattern to HTML to be able to use the static template tag Features ^^^^^^^^ * Image dimensions for cover and permission denied image 0.1.7 - 2024-11-08 ------------------ Fixes ^^^^^ * Avoid h1 -> h3 * Reserve space for image to avoid layout shift 0.1.6 - 2024-11-08 ------------------ Fixes ^^^^^ * Use preload for the fonts 0.1.5 - 2024-11-08 ------------------ Features ^^^^^^^^ * Added a new custom 403 page for the CV page when there's no token with a mailto link to the owner of the CV to request access Fixes ^^^^^ * Some minor style fixes * Fixed the input field overflow in the project item badge editor * New e2e tests for inline editing * Use the correct fonts (inter + martian mono) 0.1.4 - 2024-11-01 ------------------ Features ^^^^^^^^ * Theme switching is now possible * Better looking edit panel * New URL for CV + redirect to old URL * Cover letter is now a ListPlugin * Added an avatar image to the Cover Fixes ^^^^^ * Fixed image upload via the admin 0.1.3 - 2024-10-13 ------------------ Features ^^^^^^^^ * Added a resume detail page used as a cover letter * Added add resume button to the main page / resume list * Added delete buttons to the resume list * Added a base template for the resume pages * Do not require token for CV when user is logged in * Better print styles for the CV * Scroll animate project-boxes up * Super simple markdown support for cover letter text 0.1.2 - 2024-10-11 ------------------ Features ^^^^^^^^ * Area labels for project links without text * Project links are working now in PDF export * Global edit button for the whole CV Refactor ^^^^^^^^ * Moved all plugin templates in folders named after the plugin * Removed dead templates 0.1.1 - 2024-10-11 ------------------ Refactor ^^^^^^^^ * The main `Person` model was renamed to `Resume` Features ^^^^^^^^ * Added permission checks to the Simple and List base Plugins 0.1.0 - 2024-10-10 ------------------ Initial Release --------------- The CV is kind of working. Editing via Django-Admin or inline via contenteditable="true" is possible.