OceanGuard is a Flask web application focused on marine conservation, wildlife observation, and community participation.
It combines a species explorer, conservation project pages, observation mapping, and a social community space in one project. The goal is to make marine biodiversity feel more visible, more human, and easier to engage with through the web.
OceanGuard is designed to feel immersive and approachable: a story-led homepage, rich species pages, community features, and conservation content all in one experience.
Ocean ecosystems are under pressure from habitat loss, pollution, overfishing, and climate change. OceanGuard is designed as a digital space where users can:
- discover threatened marine species
- learn about conservation work already happening
- record and explore observations on a map
- share questions, updates, and knowledge with a community
This makes the project a good fit for people interested in climate tech, environmental education, civic technology, accessibility, and open-source web development.
- Browse a marine species directory with conservation status, threats, habitat, and supporting details
- Open rich species detail pages and track species you care about
- Explore conservation projects and project-specific species links
- Add wildlife observations with map coordinates and contextual notes
- View community-submitted observations on an interactive map
- Join a community feed with posts, comments, likes, and bookmarks
- Use profile pages, activity signals, and lightweight gamification to encourage participation
- Moderate the platform with admin tools for projects, users, and observation verification
OceanGuard is a strong contribution-friendly project because it sits at the intersection of multiple interesting areas:
- Flask application architecture
- SQLAlchemy models and relational data design
- UX and visual storytelling for environmental products
- accessibility and inclusive interface improvements
- search, recommendation, and community features
- data curation for science and education content
If you like projects that feel more meaningful than a generic CRUD app, this repo has a lot of room for improvement and experimentation.
OceanGuard runs as a local Flask app with SQLite, so you do not need to install a separate database server for development.
- Create and activate a virtual environment:
python3 -m venv .venv
source .venv/bin/activate- Install dependencies:
python -m pip install -r requirements.txt- Create your local environment file:
cp .env.example .env- Update
.envwith your own values. To create a local admin account on first run, use:
OCEANGUARD_CREATE_ADMIN=true
OCEANGUARD_ADMIN_USERNAME=admin
OCEANGUARD_ADMIN_EMAIL=admin@example.com
OCEANGUARD_ADMIN_PASSWORD=your-own-strong-password- Start the application:
python app.py- If port
5000is already in use on macOS, start on a different port:
PORT=5001 python app.py- Open the app in your browser:
http://127.0.0.1:5000
Or, if you used another port:
http://127.0.0.1:5001
- Create and activate a virtual environment in PowerShell:
py -3 -m venv .venv
.venv\Scripts\Activate.ps1If you are using Command Prompt instead:
py -3 -m venv .venv
.venv\Scripts\activate.bat- Install dependencies:
python -m pip install -r requirements.txt- Create your local environment file:
Copy-Item .env.example .env- Update
.envwith your own values. To create a local admin account on first run, use:
OCEANGUARD_CREATE_ADMIN=true
OCEANGUARD_ADMIN_USERNAME=admin
OCEANGUARD_ADMIN_EMAIL=admin@example.com
OCEANGUARD_ADMIN_PASSWORD=your-own-strong-password- Start the application:
python app.py- If port
5000is already in use, start on a different port:
$env:PORT=5001
python app.py- Open the app in your browser:
http://127.0.0.1:5000
Or, if you used another port:
http://127.0.0.1:5001
- On first launch, OceanGuard creates the local SQLite database automatically.
- The app now supports the
PORTenvironment variable, which is useful if port5000is occupied. - On some macOS setups,
5000may be used by AirPlay Receiver or other system services.
SECRET_KEY: Flask secret key used for session securityOCEANGUARD_CREATE_ADMIN: Set totrueto create a local admin during initializationOCEANGUARD_ADMIN_USERNAME: Admin username used during bootstrapOCEANGUARD_ADMIN_EMAIL: Admin email used during bootstrapOCEANGUARD_ADMIN_PASSWORD: Admin password used during bootstrap
.
├── app.py
├── data/
├── docs/
├── static/
├── templates/
├── .github/
└── requirements.txt
- Python
- Flask
- Flask-SQLAlchemy
- Flask-Login
- Flask-WTF
- SQLite
- HTML, CSS, and vanilla JavaScript
- Add automated tests for core routes, forms, and permissions
- Split the monolithic
app.pyinto blueprints, services, and model modules - Improve mobile responsiveness and accessibility across templates
- Add deployment instructions for Render, Railway, or Docker
- Improve observation validation and moderation workflows
- Expand marine species datasets and improve data quality tooling
- Add screenshots, GIF demos, and better visual documentation
- Introduce CI checks for formatting, linting, and tests
- Improve onboarding copy and empty states
- Add form validation feedback polish
- Refine search behavior and filter UX
- Add tests for login, registration, and community flows
- Clean up duplicate styles or template inconsistencies
- Improve README visuals and contributor docs
- Modularize the Flask application structure
- Add a production-ready deployment path
- Improve map exploration and filtering
- Expand recommendation and discovery features
- Strengthen admin moderation workflows
- Add more public-facing educational content around marine conservation
- Local databases, logs, caches, and
.envfiles are ignored - Sensitive hardcoded admin credentials were removed from the codebase and cleaned from reachable Git history
- Placeholder contact information in public-facing templates should still be reviewed before promotion or deployment
- Contribution guide: CONTRIBUTING.md
- Code of conduct: CODE_OF_CONDUCT.md
- Security policy: SECURITY.md
Issues and pull requests are welcome, especially around accessibility, testing, architecture, environmental storytelling, and contributor experience.
This project is released under the MIT License.

