
#1 Open-source Cap table management platform, an alternative to Carta, Pulley, Angelist and others.
Important
We envision a world where cap table management is accessible, secure, and empowering for all. Hanzo Captable aims to democratize the handling of cap tables, securities, and stakeholder interactions. Through cutting-edge technology and a commitment to openness, we strive to be the catalyst for positive change in financial ecosystems.
👷 Incorporation (wip) - Hanzo Captable helps you incorporate your company in minutes, with all the necessary legal documents and filings taken care of.
👷 Cap table management (wip) - Hanzo Captable helps you keep track of your company’s ownership structure, including who owns what percentage of the company, how much stock/options has been issued, and more.
✅ Fundraise - Hanzo Captable can help you raise capital, whether its signing standard or custom SAFE or creating and managing fundraising rounds, tracking investor commitments, and more.
✅ Investor updates - Delight your investors and team members by sending them regular updates on your company’s progress.
✅ eSign Documents - Sign SAFE, NDA, contracts, offere letters or any type of documents with Captable Sign.
✅ Data rooms - Hanzo Captable provides a secure virtual data room where you can store important documents and share them with investors, employees, and other stakeholders.
We have a community of developers, designers, and entrepreneurs who are passionate about building the future of finance. Join us on Discord to connect with like-minded individuals, share your ideas, and collaborate on projects.- Please show us some support by giving it a ⭐️
- We are looking for contributors to help us build the future of cap table management.
- Let's collaborate on Discord community channel.
- Any contributions you make are truly appreciated.
When contributing to Hanzo Captable, whether on GitHub or in other community spaces:
- Be respectful, civil, and open-minded.
- Before opening a new pull request, try searching through the issue tracker for known issues or fixes.
- Development environment on Gitpod
- Development environment with Docker
- Development environment without Docker
- Click the button below to open this project in Gitpod.
Fork & clone the forked repository
Install node and pnpm. (optional)
Copy
.env.exampleto.envcp .env.example .env
Run the following command to start the development environment
# With pnpm installed pnpm dx # Without pnpm installed docker compose up
Run the following command to migrate and seed the database
docker compose exec app pnpm db:migrate docker compose exec app pnpm db:seed
Note Everytime you make changes to Dockerfile or compose.yml, you need to rebuild the docker image by running
docker compose up --buildRunning
docker compose upwill start all the services on their respective ports.- App will be running on http://localhost:3000
- Emails will be intercepted: http://localhost:8025
- SMTP will be on PORT
http://localhost:1025 - Postgres will be on PORT
http://localhost:5432 - Prisma studio will be on PORT
http://localhost:5555
Frequently used commands
docker compose up- Start the development environmentdocker compose down- Stop the development environmentdocker compose logs -f- View logs of the running servicesdocker compose up --build- Rebuild the docker imagedocker compose run app pnpm db:migrate- Run database migrationsdocker compose run app pnpm db:seed- Seed the database
This has been tested on Mac OS and works really well. If you are using Linux/Windows/WSL, you might need to install some additional dependencies.
Clone the repository
git clone https://github.com/<your-github-name>/captable.git
Copy
.env.exampleto.envcp .env.example .env
Install latest version of node and pnpm
Install latest version of postgres database
Install mailpit for SMTP and email interception
Create database
captablein postgres databaseUpdate
.envfile'sDATABASE_URLwith database credentialsFor a quick start, you can use Supabase database or Neon as well.
To simulate file storage locally, install
miniovia homebrew or any other package manager.brew install minio
Once minio is installed run
minio server start --console-address ":9002"This will start minio server
minio api will be available onhttp://127.0.0.1:9000and
minio web gui will be available onhttp://127.0.0.1:9002.once you see these endpoint in terminal, update the following
.env:UPLOAD_ENDPOINT="http://127.0.0.1:9000"# should match minio api server's endpoint NEXT_PUBLIC_UPLOAD_DOMAIN="http://127.0.0.1:9000"# should match minio api server's endpoint UPLOAD_REGION="us-east-1"# don't change it UPLOAD_ACCESS_KEY_ID="minioadmin"# by default minio username is "minioadmin" UPLOAD_SECRET_ACCESS_KEY="minioadmin"# by default minio password is "minioadmin" UPLOAD_BUCKET_PUBLIC="captable-public-bucket" UPLOAD_BUCKET_PRIVATE="captable-private-bucket"
after this, go to minio web gui(
http://127.0.0.1:9002) and login:
username:minioadmin
password:minioadminand create two buckets with the name:
captable-public-bucketandcaptable-private-bucket,
this should matchUPLOAD_BUCKET_PUBLICandUPLOAD_BUCKET_PRIVATEenv's values.and you should be done with minio setup.
Run the following command to install dependencies
pnpm install
Run the following command to migrate and seed the database
pnpm db:migrate pnpm db:seed
Run the following command to start the development server
pnpm dev # On a different terminal, run the following command to start the mail server pnpm email:dev- App will be running on http://localhost:3000
- Emails will be intercepted: http://localhost:8025
- SMTP will be on PORT
http://localhost:1025 - Postgres will be on PORT
http://localhost:5432
Frequently used commands
pnpm dev- Start the development serverpnpm email:dev- Start the mail serverpnpm db:migrate- Run database migrationspnpm db:seed- Seed the database
When making commits, make sure to follow the conventional commit guidelines, i.e. prepending the message with feat:, fix:, chore:, docs:, etc...
git add <file>&& git commit -m "feat/fix/chore/docs: commit message"When you're done
Make a commit and push your code to your github fork and make a pull-request.
Thanks for your contributions. Much ❤️