DEPRECATED — Renamed to Propongo
This package has been renamed to propongo. Install the new package with:
pip install propongo
propongo
See https://github.com/VRConservation/propongo for the latest version.
Propongo 2 (legacy)
A local proposal generator for conservation and natural resource projects. Create professional proposals with scope of work, budgets, qualifications, timelines, and export to PDF or HTML. Detailed documentation, examples, and tutorials can be found at https://3point.xyz/propongo.
Features
- Scope of Work - Define project summary, tasks, and deliverables
- Budget - Line-item budgeting with cost/unit calculations, totals, and indirect costs
- Qualifications - Document team background and relevant experience
- Timeline - Auto-derived task timing from budget items with Gantt chart visualization
- Custom Sections - Add unlimited custom sections with Markdown formatting (NEW!)
- Excel Import - Import Excel spreadsheets as formatted tables into custom sections (NEW!)
- Preview - View the complete proposal with task-grouped budget and timeline bars
- PDF Export - Clean, professional PDF output via WeasyPrint
- HTML Export - Standalone HTML file with embedded styles
- Snippet Library - Reusable markdown components for organization descriptions, deliverable templates, and custom content
- Save/Load - Proposals stored as JSON files on disk, auto-save as you work
Quick Start
Install from PyPI (Linux/Mac)
pip install propongo2
propongo2
Opens at http://localhost:5000
Windows Installation
Recommended: Use a virtual environment to avoid conflicts with system Python.
-
Create virtual environment with Anaconda/Miniconda (recommended)
# Install Miniconda from: https://docs.conda.io/en/latest/miniconda.html conda create -n propongo python=3.10 conda activate propongo
⚠️ Warning: Installing to base Python can cause package conflicts. Learn about Anaconda/Miniconda for better Python environment management.
-
Install GTK3 Runtime (for MS Windows users: required for PDF export)
- Download: https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases/
- Run installer, choose "Full installation"
- Restart your computer
-
Install Propongo2
pip install propongo2
-
Run the application
propongo2 -
Open browser to http://localhost:5000
Troubleshooting: If PDF export fails, ensure GTK3 is in your PATH. If Excel import doesn't work, run: pip install pandas openpyxl tabulate
Install from source
git clone https://github.com/VRConservation/propongo2.git
cd propongo2
pip install -e .
propongo2
Development setup
git clone https://github.com/VRConservation/propongo2.git
cd propongo2
pip install -e ".[dev]"
python run.py
Usage
Creating a Proposal
-
Click New Proposal from the dashboard
-
Enter a title and optional client name in the header
-
Work through each tab:
Scope - Add a project summary, then create tasks/deliverables with descriptions and a lead entity
Budget - Select a task, enter line items with cost per unit and quantities. Totals and indirect costs calculate automatically.
Qualifications - Describe your organization's background and why you're qualified for this project
Timeline - Set project start date and view the auto-derived Gantt chart. Adjust budget item timing and lead entities as needed.
Custom Sections - Add unlimited custom sections with Markdown formatting. Import Excel spreadsheets as formatted tables.
Preview - Review the complete proposal with task-grouped budget and timeline before exporting
Using Custom Sections (NEW!)
Add custom sections to your proposal for any additional content:
- Click the Custom Sections tab
- Click + Add Section to create a new section
- Enter a title and content using Markdown formatting
- See a live preview of your formatted content
- Use ↑ and ↓ buttons to reorder sections
- Click 📊 Import Excel to import spreadsheet data as tables
Excel Import: Import .xlsx or .xls files and they'll be automatically converted to Markdown tables. Perfect for budget details, personnel lists, equipment inventories, or any tabular data.
Using Snippets
Click the sidebar icon (☰) to open the snippet library:
- Organization - Pre-written organization descriptions
- Deliverables - Templates for common deliverable types (surveys, assessments, plans)
- Custom - Create and save your own reusable snippets
Click a snippet to insert it at the cursor position in any text field.
Exporting
- PDF - Click "Export PDF" to generate a clean, professional PDF document
- HTML - Click "Export HTML" to download a standalone HTML file
- Print - Use Ctrl+P / Cmd+P in the Preview tab for browser printing
Managing Proposals
- Proposals auto-save as you work
- Click "Proposals" in the header to see all saved proposals
- Create, edit, or delete proposals from the dashboard
Updating
From PyPI
pip install --upgrade propongo2
From source
cd propongo2
git pull
pip install -e .
Development
Run tests
pytest
Project Structure
propongo2/
├── run.py # Dev entry point
├── pyproject.toml # Package config
├── requirements.txt # Dependencies
├── app/
│ ├── __init__.py # Version
│ ├── main.py # Flask app + routes
│ ├── models.py # Proposal data model
│ ├── export.py # PDF/HTML export
│ ├── snippets.py # Snippet management
│ ├── templates/ # Jinja2 templates
│ │ ├── base.html # Layout + HTMX
│ │ ├── index.html # Proposal dashboard
│ │ ├── scope.html # Scope editor
│ │ ├── budget.html # Budget editor
│ │ ├── qualifications.html # Qualifications editor
│ │ ├── timeline.html # Timeline + Gantt
│ │ ├── preview.html # Proposal preview
│ │ └── export_proposal.html# PDF export template
│ ├── static/
│ │ ├── css/style.css # All styles
│ │ └── js/
│ │ ├── app.js # Core JS + HTMX helpers
│ │ ├── budget.js # Budget calculations
│ │ ├── gantt.js # Gantt chart rendering
│ │ └── snippets.js # Snippet panel logic
│ ├── snippets/ # Stock snippet data
│ │ ├── organization.json
│ │ ├── deliverables.json
│ │ └── custom/ # User-created snippets
│ └── data/
│ ├── proposals/ # Saved proposals (JSON)
│ └── exports/ # Generated PDF/HTML exports
└── tests/
├── test_main.py
└── test_export.py
Tech Stack
- Backend: Python, Flask
- Frontend: HTMX, Jinja2, vanilla CSS/JS
- PDF Export: WeasyPrint
- Packaging: pyproject.toml, setuptools
License
MIT
Metadata
Release files for propongo2 1.3.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| propongo2-1.3.5.tar.gz | 59.6 kB | Without provenance | Details for propongo2-1.3.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| propongo2-1.3.5-py3-none-any.whl | Python 3 | none | any | Details for propongo2-1.3.5-py3-none-any.whl |
Total release size: 127.7 kB
Release files / propongo2-1.3.5.tar.gz
| Download URL | propongo2-1.3.5.tar.gz |
|---|---|
| Size | 59.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
16df040fb9d9ff69c64c4721df56c826fd6e5d5a6820873a79cb17dad0ca816f
|
|
BLAKE2b-256 checksum How to use checksums |
c41109a8a4e84265a91f886dc8064aff9dcdd8f396046993e9a85fec8739857f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Release files / propongo2-1.3.5-py3-none-any.whl
| Download URL | propongo2-1.3.5-py3-none-any.whl |
|---|---|
| Size | 68.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e46940eb4c5b5b938c4412b65339bf07aa4956f88b9e92f9822ca28876deb9c
|
|
BLAKE2b-256 checksum How to use checksums |
38f40ccbc1c3e501846e33800346504c4ef1a3579669da0b5a473e1f59348beb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.6
|
Security for propongo2 1.3.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.