Neighborly Notes is a small "neighborhood notes club" where users can create profiles, meet each other, and keep personal notes.
- User registration and login with JWT authentication.
- Password reset via a codeword.
- Public user profiles with avatars and bios.
- Private, secret notes for each user.
- Admin dashboard for user management.
- Frontend: Vue 3, Vite, TypeScript, Pinia, Vue Router, Axios, Tailwind CSS
- Backend: Python 3.12, Flask, SQLAlchemy, Alembic, Pydantic, Gunicorn
- Database: PostgreSQL 15
- Containerization: Docker, Docker Compose
- Docker and Docker Compose installed on your machine.
-
Clone the repository:
git clone https://github.com/your-username/neighborly-notes.git cd neighborly-notes -
Create a
.envfile in the root of theneighborly-notesdirectory by copying the example file:cp .env.example .env
You can customize the values in this
.envfile if you wish. -
Build and run the application using Docker Compose:
docker compose up --build
The application will be available at http://localhost:8080.
The database is seeded with the following test accounts:
- Admin:
- Username:
caretaker - Password:
caretaker123
- Username:
- Users:
- Username:
alice, Password:alice123 - Username:
bob, Password:bob123
- Username:
This project includes tooling to generate a Software Bill of Materials (SBOM) for both the frontend and backend components using the CycloneDX standard.
The generation process is containerized to ensure consistency. Dedicated Dockerfiles (backend/Dockerfile.sbom and frontend/Dockerfile.sbom) are provided for this purpose.
To generate the SBOM files, run the following commands from the root of the neighborly-notes directory:
docker build -t backend-sbom-temp -f ./backend/Dockerfile.sbom ./backend && docker run --rm -v "$(pwd)/sbom:/sbom" backend-sbom-tempdocker build -t frontend-sbom-temp -f ./frontend/Dockerfile.sbom ./frontend && docker run --rm -v "$(pwd)/sbom:/sbom" frontend-sbom-tempThe generated files (backend.cyclonedx.json and frontend.cyclonedx.json) will be placed in the /sbom directory.