docs: rewrite README with complete step-by-step setup guide
Adds ordered setup steps (Node.js, Python, Chrome, PostgreSQL, Redis, pip dependencies) so a fresh machine can be fully configured from git clone to running the app without guessing. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
160
README.md
160
README.md
@@ -1,15 +1,21 @@
|
|||||||
|
# Dental Manager - Starter
|
||||||
|
|
||||||
A monorepo setup to manage both Backend and Frontend of the Dental Manager application.
|
A monorepo setup to manage both Backend and Frontend of the Dental Manager application.
|
||||||
|
|
||||||
## Prerequisites
|
## 🖥️ Setup Guide (Fresh Machine)
|
||||||
|
|
||||||
Before running the project, make sure the following are installed on your machine:
|
Follow these steps in order after cloning the repository.
|
||||||
|
|
||||||
- **Node.js** v18+
|
### Step 1 — Clone the repository
|
||||||
- **Python** 3.10+
|
|
||||||
- **PostgreSQL** (primary database)
|
|
||||||
- **Redis** (job queue for Selenium and OCR tasks)
|
|
||||||
|
|
||||||
### Install Node.js (Ubuntu/Debian)
|
```sh
|
||||||
|
git clone <your-repo-url>
|
||||||
|
cd DentalManagementMHAprilgg
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2 — Install Node.js
|
||||||
|
|
||||||
|
Required to run the Backend and Frontend.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||||
@@ -20,7 +26,9 @@ node -v # should print v20.x.x
|
|||||||
npm -v
|
npm -v
|
||||||
```
|
```
|
||||||
|
|
||||||
### Install Python (Ubuntu/Debian)
|
### Step 3 — Install Python
|
||||||
|
|
||||||
|
Required to run the Selenium and OCR services.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt-get install -y python3 python3-pip python3-venv
|
sudo apt-get install -y python3 python3-pip python3-venv
|
||||||
@@ -29,21 +37,32 @@ sudo apt-get install -y python3 python3-pip python3-venv
|
|||||||
python3 --version # should print 3.10 or higher
|
python3 --version # should print 3.10 or higher
|
||||||
```
|
```
|
||||||
|
|
||||||
> The Selenium service also requires its Python dependencies. Install them once:
|
### Step 4 — Install Chrome
|
||||||
> ```sh
|
|
||||||
> cd apps/SeleniumService
|
|
||||||
> pip3 install -r requirements.txt
|
|
||||||
> ```
|
|
||||||
|
|
||||||
|
Required for the Selenium service to control a browser.
|
||||||
|
|
||||||
### Install PostgreSQL (Ubuntu/Debian)
|
```sh
|
||||||
|
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
|
||||||
|
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y google-chrome-stable
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
google-chrome --version
|
||||||
|
```
|
||||||
|
|
||||||
|
> The `webdriver-manager` package (included in `requirements.txt`) automatically downloads the matching ChromeDriver — no manual driver setup needed.
|
||||||
|
|
||||||
|
### Step 5 — Install PostgreSQL
|
||||||
|
|
||||||
|
Primary database for the application.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt-get install -y postgresql postgresql-contrib
|
sudo apt-get install -y postgresql postgresql-contrib
|
||||||
sudo systemctl enable postgresql
|
sudo systemctl enable postgresql
|
||||||
sudo systemctl start postgresql
|
sudo systemctl start postgresql
|
||||||
|
|
||||||
# Create a database and user (replace with your own values)
|
# Create a database and user (replace values as needed)
|
||||||
sudo -u postgres psql -c "CREATE USER dental_user WITH PASSWORD 'yourpassword';"
|
sudo -u postgres psql -c "CREATE USER dental_user WITH PASSWORD 'yourpassword';"
|
||||||
sudo -u postgres psql -c "CREATE DATABASE dental_db OWNER dental_user;"
|
sudo -u postgres psql -c "CREATE DATABASE dental_db OWNER dental_user;"
|
||||||
|
|
||||||
@@ -56,120 +75,101 @@ psql -U dental_user -d dental_db -c "\conninfo"
|
|||||||
> DATABASE_URL="postgresql://dental_user:yourpassword@localhost:5432/dental_db"
|
> DATABASE_URL="postgresql://dental_user:yourpassword@localhost:5432/dental_db"
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
### Install Redis (Ubuntu/Debian)
|
### Step 6 — Install Redis
|
||||||
|
|
||||||
|
Used as the job queue for Selenium and OCR background tasks.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
sudo apt-get install -y redis-server
|
sudo apt-get install -y redis-server
|
||||||
sudo systemctl enable redis-server
|
sudo systemctl enable redis-server
|
||||||
sudo systemctl start redis-server
|
sudo systemctl start redis-server
|
||||||
|
|
||||||
# Verify it's running
|
# Verify
|
||||||
redis-cli ping # should print: PONG
|
redis-cli ping # should print: PONG
|
||||||
```
|
```
|
||||||
|
|
||||||
> Both PostgreSQL and Redis are system services, not npm packages. `npm install` handles all Node.js dependencies automatically — these must be installed separately at the OS level.
|
### Step 7 — Install Node.js dependencies
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Dental Manager - Starter
|
|
||||||
|
|
||||||
A monorepo setup to manage both Backend and Frontend of the Dental Manager application.
|
|
||||||
|
|
||||||
## 🚀 Getting Started
|
|
||||||
|
|
||||||
Follow the steps below to set up and run the project:
|
|
||||||
|
|
||||||
1. Install dependency
|
|
||||||
```sh
|
```sh
|
||||||
npm install
|
npm install
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Copy Environment Variables
|
### Step 8 — Install Python dependencies
|
||||||
|
|
||||||
Create `.env` files from the provided `.env.example` templates:
|
Each Python service has its own dependencies:
|
||||||
Change the required ones env in .env files.
|
|
||||||
|
```sh
|
||||||
|
# Selenium automation service
|
||||||
|
cd apps/SeleniumService
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
cd ../..
|
||||||
|
|
||||||
|
# Payment OCR service
|
||||||
|
cd apps/PaymentOCRService
|
||||||
|
pip3 install -r requirements.txt
|
||||||
|
cd ../..
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 9 — Set up environment variables
|
||||||
|
|
||||||
|
Copy the `.env.example` files and fill in the required values.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
npm run setup:env
|
npm run setup:env
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Generate Prisma, and its Types.
|
### Step 10 — Set up the database
|
||||||
|
|
||||||
- Migrate the db:
|
|
||||||
```sh
|
```sh
|
||||||
|
# Run migrations
|
||||||
npm run db:migrate
|
npm run db:migrate
|
||||||
```
|
|
||||||
|
|
||||||
- Generate the db types:
|
# Generate Prisma types
|
||||||
```sh
|
|
||||||
npm run db:generate
|
npm run db:generate
|
||||||
|
|
||||||
|
# Insert seed data
|
||||||
|
npm run db:seed
|
||||||
```
|
```
|
||||||
|
|
||||||
- insert seed data
|
### Step 11 — Run the app
|
||||||
```sh
|
|
||||||
npm run db:seed
|
|
||||||
|
|
||||||
4. To Simply run all the app(Backend + Frontend).
|
Open two terminals:
|
||||||
|
|
||||||
|
**Terminal 1** — Backend + Frontend:
|
||||||
```sh
|
```sh
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**Terminal 2** — Selenium service:
|
||||||
5. Now you need to run the selnium service as well in new terminal.
|
```sh
|
||||||
```sh
|
|
||||||
cd apps/SeleniumService
|
cd apps/SeleniumService
|
||||||
python3 agent.py
|
python3 agent.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 📖 Developer Documentation
|
## 📖 Developer Documentation
|
||||||
|
|
||||||
- [Setting up server environment](docs/server-setup.md) — the first step, to run this app in environment.
|
- [Setting up server environment](docs/server-setup.md) — the first step, to run this app in environment.
|
||||||
- [Development Hosts & Ports](docs/ports.md) — which app runs on which host/port
|
- [Development Hosts & Ports](docs/ports.md) — which app runs on which host/port
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## This in a Turborepo. What's inside?
|
## This is a Turborepo. What's inside?
|
||||||
|
|
||||||
This Turborepo includes the following packages/apps:
|
|
||||||
|
|
||||||
### Apps and Packages
|
### Apps and Packages
|
||||||
|
|
||||||
- `docs`: a [Next.js](https://nextjs.org/) app with [Tailwind CSS](https://tailwindcss.com/)
|
- `apps/Backend` — Express.js API server
|
||||||
- `web`: another [Next.js](https://nextjs.org/) app with [Tailwind CSS](https://tailwindcss.com/)
|
- `apps/Frontend` — React + Vite frontend
|
||||||
- `ui`: a stub React component library with [Tailwind CSS](https://tailwindcss.com/) shared by both `web` and `docs` applications
|
- `apps/SeleniumService` — Python FastAPI service for browser automation (insurance eligibility, claims)
|
||||||
- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`)
|
- `apps/PaymentOCRService` — Python service for payment OCR extraction
|
||||||
- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo
|
- `@repo/eslint-config` — shared ESLint configuration
|
||||||
|
- `@repo/typescript-config` — shared `tsconfig.json`s
|
||||||
|
|
||||||
Each package/app is 100% [TypeScript](https://www.typescriptlang.org/).
|
Each package/app is 100% [TypeScript](https://www.typescriptlang.org/) (except the Python services).
|
||||||
|
|
||||||
### Building packages/ui
|
|
||||||
|
|
||||||
This example is set up to produce compiled styles for `ui` components into the `dist` directory. The component `.tsx` files are consumed by the Next.js apps directly using `transpilePackages` in `next.config.ts`. This was chosen for several reasons:
|
|
||||||
|
|
||||||
- Make sharing one `tailwind.config.ts` to apps and packages as easy as possible.
|
|
||||||
- Make package compilation simple by only depending on the Next.js Compiler and `tailwindcss`.
|
|
||||||
- Ensure Tailwind classes do not overwrite each other. The `ui` package uses a `ui-` prefix for it's classes.
|
|
||||||
- Maintain clear package export boundaries.
|
|
||||||
|
|
||||||
Another option is to consume `packages/ui` directly from source without building. If using this option, you will need to update the `tailwind.config.ts` in your apps to be aware of your package locations, so it can find all usages of the `tailwindcss` class names for CSS compilation.
|
|
||||||
|
|
||||||
For example, in [tailwind.config.ts](packages/tailwind-config/tailwind.config.ts):
|
|
||||||
|
|
||||||
```js
|
|
||||||
content: [
|
|
||||||
// app content
|
|
||||||
`src/**/*.{js,ts,jsx,tsx}`,
|
|
||||||
// include packages if not transpiling
|
|
||||||
"../../packages/ui/*.{js,ts,jsx,tsx}",
|
|
||||||
],
|
|
||||||
```
|
|
||||||
|
|
||||||
If you choose this strategy, you can remove the `tailwindcss` and `autoprefixer` dependencies from the `ui` package.
|
|
||||||
|
|
||||||
### Utilities
|
### Utilities
|
||||||
|
|
||||||
This Turborepo has some additional tools already setup for you:
|
|
||||||
|
|
||||||
- [Tailwind CSS](https://tailwindcss.com/) for styles
|
- [Tailwind CSS](https://tailwindcss.com/) for styles
|
||||||
- [TypeScript](https://www.typescriptlang.org/) for static type checking
|
- [TypeScript](https://www.typescriptlang.org/) for static type checking
|
||||||
- [ESLint](https://eslint.org/) for code linting
|
- [ESLint](https://eslint.org/) for code linting
|
||||||
|
|||||||
Reference in New Issue
Block a user