By Weedo :3
.
├── Backend
│ ├── app
│ │ ├── api
│ │ │ ├── auth.py
│ │ │ ├── dashboards.py
│ │ │ ├── data.py
│ │ │ ├── __init__.py
│ │ │ └── templates.py
│ │ ├── auth
│ │ │ ├── __init__.py
│ │ │ └── security.py
│ │ ├── core
│ │ │ ├── dependencies.py
│ │ │ └── __init__.py
│ │ ├── crud
│ │ │ ├── dashboard.py
│ │ │ ├── data.py
│ │ │ ├── __init__.py
│ │ │ └── user.py
│ │ ├── __init__.py
│ │ ├── main.py
│ │ ├── models
│ │ │ ├── __init__.py
│ │ │ ├── models.py
│ │ │ └── mongo.py
│ │ └── settings.py
│ ├── data
│ ├── docker-compose.yml
│ ├── README.md
│ └── requirements.txt
└── Frontend
└── KeepDM
├── components.json
├── eslint.config.js
├── index.html
├── package.json
├── package-lock.json
├── public
│ ├── logo.svg
│ └── vite.svg
├── README.md
├── src
│ ├── api
│ │ ├── client.ts
│ │ ├── config.ts
│ │ ├── index.ts
│ │ └── services
│ │ ├── auth.service.ts
│ │ ├── dashboard.service.ts
│ │ ├── data.service.ts
│ │ └── template.service.ts
│ ├── App.css
│ ├── App.tsx
│ ├── assets
│ │ └── react.svg
│ ├── components
│ │ ├── app-sidebar.tsx
│ │ ├── area-chart-big.tsx
│ │ ├── area-chart-small.tsx
│ │ ├── badge-demo.tsx
│ │ ├── bar-chart-big.tsx
│ │ ├── bar-chart-small.tsx
│ │ ├── dashboard-empty.tsx
│ │ ├── dialog-demo.tsx
│ │ ├── empty-demo-1.tsx
│ │ ├── empty-demo-2.tsx
│ │ ├── line-chart-big.tsx
│ │ ├── line-chart-small.tsx
│ │ ├── login-form.tsx
│ │ ├── mode-toggle.tsx
│ │ ├── nav-data.tsx
│ │ ├── nav-main.tsx
│ │ ├── nav-projects.tsx
│ │ ├── nav-settings.tsx
│ │ ├── nav-user.tsx
│ │ ├── page-layout.tsx
│ │ ├── pie-chart.tsx
│ │ ├── protected-route.tsx
│ │ ├── public-route.tsx
│ │ ├── signup-form.tsx
│ │ ├── sonner-demo.tsx
│ │ ├── team-switcher.tsx
│ │ ├── ui
│ │ │ ├── alert.tsx
│ │ │ ├── avatar.tsx
│ │ │ ├── badge.tsx
│ │ │ ├── breadcrumb.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── chart.tsx
│ │ │ ├── checkbox.tsx
│ │ │ ├── collapsible.tsx
│ │ │ ├── dialog.tsx
│ │ │ ├── drawer.tsx
│ │ │ ├── dropdown-menu.tsx
│ │ │ ├── empty.tsx
│ │ │ ├── field.tsx
│ │ │ ├── input.tsx
│ │ │ ├── label.tsx
│ │ │ ├── select.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── sheet.tsx
│ │ │ ├── sidebar.tsx
│ │ │ ├── skeleton.tsx
│ │ │ ├── sonner.tsx
│ │ │ ├── table.tsx
│ │ │ └── tooltip.tsx
│ │ ├── upload-empty-no-files.tsx
│ │ ├── upload-empty-no-templates.tsx
│ │ ├── upload-file-dialog.tsx
│ │ └── widgets
│ │ ├── area-widget.tsx
│ │ ├── bar-widget.tsx
│ │ ├── index.ts
│ │ ├── kpi-widget.tsx
│ │ ├── line-widget.tsx
│ │ ├── pie-widget.tsx
│ │ ├── table-widget.tsx
│ │ └── widget-error.tsx
│ ├── hooks
│ │ ├── use-mobile.ts
│ │ └── use-theme.tsx
│ ├── index.css
│ ├── lib
│ │ └── utils.ts
│ ├── main.tsx
│ └── views
│ ├── dashboard-create.tsx
│ ├── dashboard-detail.tsx
│ ├── dashboard.tsx
│ ├── profile.tsx
│ ├── table-manager.tsx
│ ├── table.tsx
│ ├── template-create.tsx
│ ├── template-detail.tsx
│ ├── template-edit.tsx
│ ├── templates.tsx
│ ├── upload-detail.tsx
│ ├── upload-preview.tsx
│ └── upload.tsx
├── tsconfig.app.json
├── tsconfig.json
├── tsconfig.node.json
└── vite.config.tsDeployment config will be added later.