Full-stack application for exporting, storing, and browsing Odoo ERP data locally.
Odoo Instance (XML-RPC)
β (Python export scripts)
JSON Data Files (odoo-data/)
β (Node.js import script)
SQLite Database (backend/database.sqlite)
β (Express REST API)
Next.js Frontend (React + Tailwind)
All code is consolidated in this single directory!
- Dashboard - Overview statistics, charts, and recent activity
- Employee Directory - Card grid with avatars, skills matrix, org chart
- Timesheets - FullCalendar week/month views with filtering
- Planning - Resource scheduling calendar
- Projects - Kanban task boards, project management
- CRM - Sales pipeline with drag-drop Kanban
- AI Assistant - Natural language queries with Claude (Haiku/Sonnet/Opus)
Frontend:
- Next.js 14 (Static Export)
- React Query for data fetching
- shadcn/ui components
- FullCalendar for timesheet/planning views
- Recharts for analytics
- Tailwind CSS with Odoo-inspired styling
Backend:
- Node.js + Express
- SQLite database (300MB from JSON import)
- Anthropic Claude AI integration
- Static file serving for employee avatars
- Node.js 18+
- npm or yarn
- Clone and install dependencies:
cd ~/odoo-doo
npm install
cd frontend && npm install
cd ../backend && npm install- Import Odoo data to SQLite:
cd ~/odoo-doo/backend
npm run importThis will process ~300MB of JSON files and create database.sqlite (takes 2-3 minutes).
- Configure environment:
# Backend (.env optional)
PORT=3001
# Frontend
NEXT_PUBLIC_API_URL=http://localhost:3001Run both frontend and backend concurrently:
cd ~/odoo-doo
npm run devOr run separately:
# Terminal 1 - Backend
cd backend
npm run dev
# Terminal 2 - Frontend
cd frontend
npm run devAccess:
- Frontend: http://localhost:3000
- Backend API: http://localhost:3001
- Navigate to http://localhost:3000
- Browse dashboard, employees, timesheets
- Go to AI Assistant page
- Enter your Anthropic API key (starts with
sk-ant-api03-...) - Ask questions like:
- "Show me hours logged by employees this month"
- "Which employees have Python skills?"
- "What's the current sales pipeline value?"
After import, you'll have:
- 130 employees with avatars and skills
- 700K+ timesheet entries spanning multiple years
- 50 projects with 3,000+ tasks
- 4,000+ CRM leads in sales pipeline
- 80K+ planning slots for resource scheduling
odoo-doo/
βββ frontend/ # Next.js application
β βββ app/ # Pages (Dashboard, Employees, etc.)
β βββ components/ # UI components
β βββ lib/ # Utils
βββ backend/ # Express API
β βββ src/
β β βββ database/ # Schema & connection
β β βββ models/ # Data access layer
β β βββ routes/ # API endpoints
β β βββ ai/ # Claude integration
β β βββ import/ # JSON β SQLite import
β βββ database.sqlite # Generated database
βββ binaries/ # Employee avatars & images (880MB)
βββ api/ # Azure Functions (for deployment)
| Route | Description |
|---|---|
/ |
Dashboard with stats and charts |
/employees |
Employee directory with search/filters |
/employees/skills |
Skills matrix view |
/employees/org-chart |
Organizational hierarchy |
/timesheets |
Calendar view of logged hours |
/planning |
Resource scheduling calendar |
/projects |
Kanban task boards |
/crm |
Sales pipeline Kanban |
/ai-chat |
Claude-powered Q&A |
| Endpoint | Description |
|---|---|
GET /api/dashboard/overview |
Dashboard statistics |
GET /api/employees |
Employee list (paginated) |
GET /api/employees/:id |
Employee details with skills |
GET /api/timesheets/calendar |
Calendar events for date range |
GET /api/projects/meta/kanban |
Kanban board data |
GET /api/crm/pipeline |
CRM pipeline by stage |
POST /api/ai/query |
Natural language query |
- Azure CLI installed
- Azure Static Web Apps account
- Build the frontend:
cd frontend
npm run build-
Upload database to Azure: Upload
backend/database.sqliteto Azure Blob Storage or include in deployment. -
Deploy to Azure Static Web Apps:
az staticwebapp create \
--name odoo-doo \
--resource-group <your-resource-group> \
--source . \
--location "East US 2" \
--branch main \
--app-location "frontend" \
--output-location "dist" \
--api-location "api"- Set environment variables:
az staticwebapp appsettings set \
--name odoo-doo \
--setting-names ANTHROPIC_API_KEY=<your-key>The stack is optimized for minimal resources:
- SQLite eliminates separate database server
- Static export removes Next.js server overhead
- Serverless functions scale to zero when idle
- Pagination prevents loading large datasets
- Indexes on date/employee/project fields
The AI Assistant uses Claude to query your data. Example queries:
Employee Queries:
- "Who are the managers in Engineering?"
- "Show me employees with React and Python skills"
- "List all employees in the Poland office"
Timesheet Queries:
- "How many hours did John Smith log last week?"
- "Show total hours by project this month"
- "Who worked on the Toro project in January?"
CRM Queries:
- "List opportunities over $50K in Negotiation stage"
- "What's the conversion rate from Lead to Opportunity?"
- "Show top 10 deals by value"
Project Queries:
- "Which projects have overdue tasks?"
- "Show task completion rate by project"
- "List all In Progress tasks for Life Fitness"
- Purple sidebar (#714B67) matching Odoo branding
- Kanban boards with drag-drop (CRM, Projects)
- Calendar views for timesheets and planning
- Avatar grids for employees
- Badge colors for priorities and statuses
- Breadcrumb navigation
- AI API key stored server-side (never exposed to client)
- CORS configured for specific origins
- Helmet.js security headers
- Input sanitization on all endpoints
- SQLite prepared statements prevent injection
- Real-time collaboration with WebSockets
- Excel/CSV export functionality
- Advanced filters and saved views
- Mobile-responsive optimizations
- Role-based access control
- Data sync from live Odoo instance
Import fails:
- Ensure
/home/markteskey/odoo-legacy/odoo-dataexists - Check Node.js version (18+)
- Verify 2GB+ free disk space
Frontend won't start:
- Delete
frontend/.nextand rebuild - Run
npm installin frontend directory - Check port 3000 is available
Backend API errors:
- Verify
database.sqliteexists - Check backend is running on port 3001
- Review backend console for errors
Images not loading:
- Verify
binariesdirectory exists and contains subdirectories (hr_employee, res_partner, etc.) - Check image paths in database
- Ensure static file middleware is configured
This project is for internal use with Warecorp Odoo data.
Built with OpenCode AI assistant.