Draftly is a modern blogging application inspired by platforms like Medium, designed to empower users to share their ideas and stories with the world.
- React: A JavaScript library for building user interfaces, providing a flexible and efficient way to create dynamic web applications.
- Zod: A TypeScript-first schema declaration and validation library, enabling robust type checking and validation of frontend data.
- TypeScript: A statically typed superset of JavaScript that enhances code quality, maintainability, and developer productivity.
- JWT (JSON Web Tokens): A standard for securely transmitting information between parties as a JSON object, commonly used for authentication in web applications.
- Cloudflare Workers: A serverless execution environment that allows you to run JavaScript code at the edge of the Cloudflare network, providing scalable and efficient backend logic. Hono
- TypeScript: Leveraged for backend development as well, ensuring consistent type safety and code integrity across the entire application.
- Prisma: A modern ORM (Object-Relational Mapping) tool that simplifies database access and manipulation, offering type-safe database queries and schema migrations. Prisma
- PostgreSQL: A powerful open-source relational database management system, chosen for its reliability, scalability, and extensive feature set. Aiven
- Clone the repository:
git clone https://github.com/CodecAnuj/draftly.git
- Navigate to the project directory:
cd draftly
- Install dependencies for both the frontend and backend using Bun:
cd frontend
bun install
cd ../backend
bun install
-
Create a
.env
file insidefrontend
andbackend
.- Inside frontend
.env
:
VITE_BACKEND_URL="YOUR_BACKEND_URL_HERE"
Note: Replace
YOUR_BACKEND_URL_HERE
with the actual backend URL when deploying.- Inside backend
.env
:
DATABASE_URL="PASTE DATABASE URL" JWT_SECRET="prod_mysecret"
- Move to PRISMA site, create a new Project, and click Enable Accelerate.
- Under Database Connection String, paste the Aiven DB URL created initially.
- Click ENABLE ACCELERATE, then Generate API KEY.
- A URL is generated, which will be used inside the
wrangler.jsonc
file.
- Inside frontend
-
Create a
wrangler.jsonc
file insidebackend
and configure Cloudflare Workers: -
Start the
backend
server using Cloudflare Workers:
bun run dev
- Start the
frontend
development server:
bun run dev
- NOTE If you make changes in the database (i.e.,
schema.prisma
file), you need to migrate using the following command:
bunx prisma migrate dev --name init_schema
- It will generate a migration folder inside
prisma
. - Then generate the Prisma client:
bunx prisma generate --no-engine
Access the project in your browser at http://localhost:3000.
bunx wrangler whoami
bunx wrangler login
bun run deploy
Cloudflare Workers do not take environment variables from
.env
files; they take them fromwrangler.jsonc
.
- This project demonstrates the usage of Cloudflare Workers and the need for a connection pool when connecting to a database.
- Cloudflare Workers create multiple instances worldwide. Each instance connects to the database, which can be inefficient.
- To resolve this, a connection pool is used via Prisma, which helps efficiently manage database connections.