A prototype of a local-first password manager. Built to support IAPMEI startup application №1561.
Stack:
- Bun
- Prettier
- ESLint
- TypeScript
- React
- Normalize CSS
- Tailwind CSS
- PouchDB — on a client
- CouchDB — on a server side
- Nano — to connect to CouchDB from server
- Uuid.js — to generate UUIDs v7 according to RFCs
- Docker
- Docker Compose
To install dependencies:
bun install
To start a development server:
cp .env.example .env
docker run -d --name couchdb -p 5984:5984 -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password couchdb:latest
docker exec couchdb curl -X PUT http://admin:password@localhost:5984/_users
docker exec couchdb curl -X PUT http://admin:password@localhost:5984/_node/nonode@nohost/_config/httpd/enable_cors -d '"true"'
docker exec couchdb curl -X PUT http://admin:password@localhost:5984/_node/nonode@nohost/_config/cors/origins -d '"*"'
docker exec couchdb curl -X PUT http://admin:password@localhost:5984/_node/nonode@nohost/_config/cors/credentials -d '"true"'
docker restart couchdb
bun dev
To run for production:
bun start
build
currently doesn't work
To build an image for local development:
docker build . -t mellon
To run in a container:
docker run -d \
--name mellon-app \
-p 3000:3000 \
-v ./.env:/app/.env \
mellon
To build an image for server shipment:
docker build --pull --platform linux/amd64 -t mellon . --tag your_resigtry_adress/mellon:latest
docker push your_resigtry_adress/mellon:latest
docker-compose.yml
to run everything using docker compose up -d
:
services:
mellon-app:
image: your_resigtry_adress/mellon:latest
container_name: mellon-app
volumes:
-./.env:/app/.env
depends_on:
- mellon-couchdb
networks:
- web-network
restart: always
mellon-couchdb:
image: couchdb:latest
container_name: mellon-couchdb
environment:
- COUCHDB_USER=your_admin_name
- COUCHDB_PASSWORD=your_admin_password
- COUCHDB_BIND_ADDRESS=0.0.0.0
- COUCHDB_SECRET=your_secret_here
- NODENAME=mellon-couchdb
volumes:
- couchdb-data:/opt/couchdb/data
- ./local.ini:/opt/couchdb/etc/local.d/local.ini
networks:
- web-network
restart: always
volumes:
couchdb-data:
networks:
web-network:
external: true