Changelog¶
[Unreleased]\n\n## 1.6.10\n\n## 1.6.9¶
Added
- Username or email accepted on the login page
- Password reset emails now include a clickable link (multipart HTML) and correct public URLs behind the Run/proxy
- Bot protection on registration: hidden honeypot field and per-IP / per-email rate limiting
Changed
- SMTP settings (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM) now load from a
.envfile or theConfigclass, and failures to send reset emails are surfaced instead of silently ignored
1.6.8¶
1.6.7¶
1.6.6¶
1.6.5¶
1.6.4¶
1.6.3¶
Added
Changed
- button size fixes on landing page
1.6.2¶
Added
- rfp reader from file
- ui for app for running reacher
Changed
- Changelog bullets
- Caveat box for beta testing on landing page
1.6.0¶
Added
- Mapping tab with GeoLibre
- Timeline export as PNG — new "Export PNG" button on the Timeline heading in the preview
- Page numbers in DOCX exports (right-aligned, 9pt gray)
- PDF export page numbers moved to the bottom-right, styled at 9pt gray
Changed
- DOCX timeline now renders as a Gantt chart on a landscape page (colored bars matching the PDF/HTML look instead of block markers)
- Timeline PNG export renders with the same engine as the PDF export (WeasyPrint)
1.5.0¶
Added
- Render deployment support (Dockerfile and render.yaml blueprint)
- User authentication with self-registration and admin accounts
- Admin credentials configurable via environment variables
- Ko-fi donation links
Changed
- User-specific snippets and results library data enabled (seeded from package copies on first run)
- Render deployment upgraded to the Basic plan (adds a persistent disk for proposal data)
Fixed
- Save issues across proposal forms
- French translation corrections
- DOCX export timeline rendering
- Example proposals save correctly
- Seed proposals fixed
1.4.0¶
Added
- Multi-language support — the UI is now available in English, Spanish, and French
- Results library for storing reusable proposal outcomes
- Docker install files (Dockerfile, docker-compose) and installation docs
- Collaboration guide in the docs
Changed
- Budget section improvements (scheduling and by-year breakdown)
Fixed
- Gallery storage location
- Dev server startup now frees port 5000 automatically
- Snippet library loading and save behavior
- Installed package version conflict resolution
1.3.0¶
Added
- Custom sections with Markdown formatting
- Excel import for spreadsheets
- Snippet library for reusable text blocks
- Live Markdown preview for custom sections
- Section reordering with up/down buttons
- Startup message when running propongo command
- Docstrings to all public functions and classes
- API reference documentation via mkdocstrings
- MkDocs documentation site at 3point.xyz/propongo
Changed
- PDF export: reduced landscape margins (1.5cm → 0.8cm), widened task label column (70px → 160px)
- Added Templates section to usage documentation
- Custom regex markdown parser replaced with standard
markdownlibrary - Centralized configuration in new
app/config.py - Comprehensive logging, type hints, and numeric input validation added
- Removed unused
TaskandBudgetItemdataclasses _DATA_ROOTpath unified — no more platform-dependent divergence
Fixed
- Graceful WeasyPrint failure on Windows with GTK3 install link
- Store proposals, templates, and snippets in Documents/Propongo/ instead of site-packages
- Include templates, static files, and snippets in installed package (missing in 1.3.2)
- End date now saves correctly even when no tasks exist (timeline dropdowns were guarded on
#timeline-inputswhich only renders with tasks) - Timeline Gantt chart, preview, and export no longer enforce a 12-month minimum — actual project duration is respected
- End month now included in chart/preview/export (was off by one)
- Data directory now uses
~/Documents/Propongo/consistently across all platforms (wasdata/relative to app source on Linux) - Existing proposals in old
data/directory are automatically migrated to the new path on first run - Subtitle field missing from proposal list display on homepage and Switch Proposal modal
- Memory leak from unbounded proposal lock dictionary (switched to
WeakValueDictionary) - Duplicate export context code extracted to shared
utils.py - Standardized all error messages across the app
- Specific HTTP status codes for Excel import errors (400 vs 500)
Security
- Replaced hardcoded secret key with
FLASK_SECRET_KEYenv var or secure random fallback
1.2.0¶
Added
- Gantt chart timeline visualization
- HTML export
1.1.0¶
Added
- PDF export via WeasyPrint
1.0.0¶
Added
- Initial release