Skip to main content

A local proposal generator for conservation and natural resource projects

Project description

Propongo 2

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.

Features

  • Scope of Work - Define project summary, tasks, and deliverables
  • Budget - Line-item budgeting with cost/unit calculations and totals
  • Qualifications - Document team background and relevant experience
  • Timeline - Set lead times and durations per task with GANTT chart visualization
  • Preview - View the complete proposal before exporting
  • 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, no database required

Quick Start

Install from PyPI

pip install propongo2

Run

propongo2

Opens at http://localhost:5000

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

  1. Click New Proposal from the dashboard

  2. Enter a title and optional client name in the header

  3. Work through each tab:

    Scope - Add a project summary, then create tasks/deliverables with descriptions

    Budget - Select a task, enter line items with cost per unit and quantities. Totals calculate automatically.

    Qualifications - Describe your organization's background and why you're qualified for this project

    Timeline - Set project start date, configure lead times and durations per task, then view the Gantt chart

    Preview - Review the complete proposal before exporting

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

Bump version

bump2version patch   # 0.1.0 -> 0.1.1
bump2version minor   # 0.1.1 -> 0.2.0
bump2version major   # 0.2.0 -> 1.0.0

Publish to PyPI

python -m build
twine upload dist/*

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)
└── 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

propongo2-1.0.0.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

propongo2-1.0.0-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file propongo2-1.0.0.tar.gz.

File metadata

  • Download URL: propongo2-1.0.0.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for propongo2-1.0.0.tar.gz
Algorithm Hash digest
SHA256 dd0a6fbeafeb8390e92f8c18224674704ba5b88110a8b793fa4c37057dec0fd2
MD5 624cf2f79e2f418846881d9cad574543
BLAKE2b-256 a46be25e928c969db42bfe10d6d1d9907a7f4e3bc4a18ba4ba6e91002752a75a

See more details on using hashes here.

File details

Details for the file propongo2-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: propongo2-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for propongo2-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b198dd98eff5296e36ca6c6e7f741480a2b3ecacc3ffd51aae5033aaab443d11
MD5 6902723778c46af5c66891d98904b87a
BLAKE2b-256 d34246675ddef1cd988761d9538cc5c9cf3b84d6b8c349daa78b7428c7ac8b80

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page