Skip to content

Commit 2953398

Browse files
authored
Merge pull request #2813 from appwrite/add-react-admin-blog
Add React Admin site template blog
2 parents 0a0bae5 + 3c28b16 commit 2953398

File tree

12 files changed

+284
-0
lines changed

12 files changed

+284
-0
lines changed

.optimize-cache.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,7 @@
872872
"images/blog/public-roadmap-announcement/framework.png": "04238693280f342e3c195a8fc503c83e6eee16181b4ef9342538bd05b448138b",
873873
"images/blog/push-notifications-best-practices.png": "64a386549ddf9f28ea1635696f30b57e3c1272b59792ecb8c1d3bf603b302af6",
874874
"images/blog/race-conditions-db-operators/cover.png": "6fed62916e9c4625093fb22ee70488744d17d1933fd0d29d6916b63c67c25333",
875+
"images/blog/react-admin-template-sites/cover.png": "bfbc39ce6f458ca9930f144ba519d15b6ebedb4988bf912d3fa8682f7f45dd94",
875876
"images/blog/react-nativecross.png": "25fb3f55f8dec1e4e1b07d4995d695c1f53579b2e283fe9894fe932591f01896",
876877
"images/blog/react-protected-routes/cover.png": "0b9257f28c839295b8f31f382cb71e151729abb0ce02625b4f0bf2a67899a005",
877878
"images/blog/reasons-to-run-your-ci-pipeline-on-appwrite/cover.png": "acc0bd5633739773a0641e8adaf2cbf0b3f88f504c5407801d155b507f055fbd",
@@ -1584,6 +1585,7 @@
15841585
"images/integrations/avatars/openai.png": "8e2a950f55a705708a71c4a813046050e5a199f1098db20562fac93591e6d3f1",
15851586
"images/integrations/avatars/perplexity.png": "1aeff5375655bf397465f7824c9baffbfc867669a80dafc475091c55b17c199b",
15861587
"images/integrations/avatars/raygun.png": "dffa2cf7b4e6717b9fa578c22dd1f9e919952fb32ee76de8a0addc052fb4f183",
1588+
"images/integrations/avatars/react-admin.png": "8e89fed781a54d8a5dbfa9116f8dea0d83dfc273a482d28bd627ec32517642a9",
15871589
"images/integrations/avatars/rxdb.png": "b46c8cef0d75139add85308998ff3f27379f080df0afa8dbeb48a49155be6b9d",
15881590
"images/integrations/avatars/sendgrid.png": "05f61b2f798f705bb13435cc3a97e0b910cc0cdfbc1b55663cf0769c104d3ff7",
15891591
"images/integrations/avatars/sentry.png": "870368b5a1734068f681892434a6d50714afe7ecc4879d71cc39ce53398da28e",
@@ -1721,6 +1723,13 @@
17211723
"images/integrations/sites-nxtlnk/search-site.png": "23582e858e70f9b81d1c36c8fefad64671d9c59d35f8c3b26638ce2cd69fcd12",
17221724
"images/integrations/sites-nxtlnk/site-details.png": "d5bb4e13a0e173d4a089e12e163cc4cbb1af0d11f77750d770f13c78f3697116",
17231725
"images/integrations/sites-nxtlnk/success.png": "75ff7b8f988fab62e6bbe1711940f6189b5bcab84fe12203c64ac2e34adefdaf",
1726+
"images/integrations/sites-react-admin/clone-template.png": "935ace26282811b8db06e4340e483471a954bb31f07c71d9dead06dc5a0eab95",
1727+
"images/integrations/sites-react-admin/cover.png": "39fa3933185ff8e56647314c00a0cc45c3a4a806e58d4c353b801f41a6c5de17",
1728+
"images/integrations/sites-react-admin/create-site.png": "7dbc51ab426e90619d4c958ddcdd7e03e92492f2c91faec628cb2a30a7700dc2",
1729+
"images/integrations/sites-react-admin/deployment-screen.png": "8f9e606688628d481e23dc27b775e8693d942b3709fb0af10646939df596737d",
1730+
"images/integrations/sites-react-admin/search-site.png": "bb6174a7db0871ff67484917a4d3474e2e7819651b6b43ce4f380a8ee0573a8b",
1731+
"images/integrations/sites-react-admin/site-details.png": "d5f7f33b06a7749d150af418880ede4b69dd5c0df179f67ef26c07ee2e820115",
1732+
"images/integrations/sites-react-admin/success.png": "80030228266667175e6b19f5103e1c23e0de61e037aac4395f0c3989990908df",
17241733
"images/integrations/sites-starlight/clone-template.png": "bcec1551922dc2fe44a67eba30dc456ccc056f2b18104a33371be926cd4b1ec7",
17251734
"images/integrations/sites-starlight/cover.png": "b3bc447ff28204c769051fca0f15967c9ce32a02b4bc744715f0343f17044902",
17261735
"images/integrations/sites-starlight/create-site.png": "136097ac602e42a4d97d8498f806f2c5e2b809de8000a7f2e5da2a6288dcc957",
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
---
2+
layout: post
3+
title: Build and deploy a CRM dashboard with React Admin on Appwrite Sites
4+
description: Learn how to deploy the CRM dashboard template powered by React Admin on Appwrite Sites, configure it with your Appwrite project, and customize it to your needs.
5+
date: 2026-04-03
6+
cover: /images/blog/react-admin-template-sites/cover.png
7+
timeToRead: 5
8+
author: aditya-oberai
9+
category: tutorial
10+
featured: false
11+
callToAction: true
12+
---
13+
14+
Admin dashboards are at the heart of most business applications. Whether you're managing customers, tracking orders, or reviewing invoices, having a well-structured internal tool can make or break your team's productivity. However, building one from scratch, with data grids, filters, forms, and CRUD operations, takes significant time and effort.
15+
16+
That's where the new **CRM dashboard with React Admin** site template comes in. Built on top of [React Admin](https://marmelab.com/react-admin/), one of the most popular open-source frameworks for building admin interfaces, this template gives you a fully functional CRM dashboard that connects directly to your Appwrite backend. And with Appwrite Sites, you can deploy it in just a few clicks.
17+
18+
# What is React Admin?
19+
20+
React Admin is an open-source framework, licensed under the MIT license, for building B2B applications and internal tools on top of REST or GraphQL APIs. It provides a rich set of UI components powered by Material-UI, including data grids, forms, filters, authentication, and more, all following best practices for enterprise-grade admin interfaces. While React Admin also offers an Enterprise Edition with additional features, the open-source version is fully functional and is what this template uses.
21+
22+
When combined with Appwrite's backend services (TablesDB, authentication), React Admin becomes a powerful foundation for building full-stack admin dashboards without reinventing the wheel.
23+
24+
# Overview of the CRM dashboard template
25+
26+
The CRM dashboard template is a React-based admin panel designed for managing common business entities. It includes:
27+
28+
- **Customers management**: View, create, edit, and delete customer records
29+
- **Orders tracking**: Keep track of orders with statuses and details
30+
- **Products catalog**: Manage your product listings and categories
31+
- **Invoices**: Generate and review invoices
32+
- **Reviews**: Monitor and manage customer reviews
33+
- **Segments**: Group and filter customers by segments
34+
- **Dashboard overview**: A landing page summarizing key metrics
35+
- **Rich UI components**: Built with Material-UI for a polished, professional look
36+
37+
The template uses Appwrite TablesDB as its data layer and comes with an automatic seeding script that creates the necessary database, tables, and a demo user during deployment, so you can explore the dashboard immediately.
38+
39+
# Deploy the CRM dashboard on Appwrite
40+
41+
To get started, head to [Appwrite Cloud](https://cloud.appwrite.io) and sign in (or [create an account](https://cloud.appwrite.io/console/register) if you haven't already). Create a project, then navigate to the **Sites** page from the left sidebar.
42+
43+
![Create new site](/images/integrations/sites-react-admin/create-site.png)
44+
45+
Click the **Create site** button and select the **Clone a template** option.
46+
47+
![Create new site](/images/integrations/sites-react-admin/clone-template.png)
48+
49+
## Find the template
50+
51+
On the template listing page, you can filter by **Use case** and select **Dashboard**, or simply search for **React Admin** in the search bar. Click on the **CRM dashboard with React Admin** template to proceed.
52+
53+
![Search templates](/images/integrations/sites-react-admin/search-site.png)
54+
55+
## Configure site details
56+
57+
You'll be prompted to enter a **Site name** and **Site ID**. The Site ID will be part of your deployment URL, so keep it lowercase with hyphens.
58+
59+
![Configure site details](/images/integrations/sites-react-admin/site-details.png)
60+
61+
Next, connect a GitHub repository. You can either create a new repository from the template or connect to an existing one. If you would prefer not to connect a GitHub repository immediately, you can do so at a later point too.
62+
63+
## Set environment variables
64+
65+
The template requires a few environment variables to connect to your Appwrite project:
66+
67+
| Variable | Description | Required |
68+
|---|---|---|
69+
| `VITE_APPWRITE_ENDPOINT` | Your Appwrite API endpoint | Yes |
70+
| `VITE_APPWRITE_PROJECT_ID` | Your Appwrite project ID | Yes |
71+
| `APPWRITE_API_KEY` | An Appwrite API key (used for seeding data during build) | Yes |
72+
| `VITE_APPWRITE_DATABASE_ID` | Database ID (defaults to `admin`) | No |
73+
| `VITE_APPWRITE_TABLE_REVIEWS` | Table ID for reviews (defaults to `reviews`) | No |
74+
| `VITE_APPWRITE_TABLE_INVOICES` | Table ID for invoices (defaults to `invoices`) | No |
75+
| `VITE_APPWRITE_TABLE_ORDERS` | Table ID for orders (defaults to `orders`) | No |
76+
| `VITE_APPWRITE_TABLE_PRODUCTS` | Table ID for products (defaults to `products`) | No |
77+
| `VITE_APPWRITE_TABLE_CATEGORIES` | Table ID for categories (defaults to `categories`) | No |
78+
| `VITE_APPWRITE_TABLE_CUSTOMERS` | Table ID for customers (defaults to `customers`) | No |
79+
80+
The `VITE_APPWRITE_ENDPOINT` and `VITE_APPWRITE_PROJECT_ID` variables will be pre-filled for you. For the `APPWRITE_API_KEY`, you need to create an API key on your Appwrite project. On the project overview page, head to the **Integrations** section, click on the **API keys** tab, and create a key with the `users` and `databases` scopes.
81+
82+
*Note: The API key is used only during the build step to seed the database, tables, and demo user. Since this is a static site built with Vite, the API key is not included in the final deployed assets and is not accessible to end users.*
83+
84+
This template also works with self-hosted Appwrite instances. Just set `VITE_APPWRITE_ENDPOINT` to point to your self-hosted instance's API endpoint.
85+
86+
## Deploy
87+
88+
Once everything is configured, update the domain name if you'd like, and click **Deploy**. Appwrite will build the project using `pnpm install` and `pnpm build && pnpm db-seed`, which compiles the React app and runs the seeding script to create the database, tables, and a demo user.
89+
90+
You can watch the deployment logs in real time as the build progresses.
91+
92+
After a successful deployment, you'll see the **Congratulations** page. Click **Visit site** to open your new CRM dashboard, or **Go to dashboard** to view site configuration details.
93+
94+
![Deployment screen](/images/integrations/sites-react-admin/deployment-screen.png)
95+
96+
You can also add a custom domain to your site. Head to your Site's **Settings** > **Domains** in the Appwrite Console and add your domain. Appwrite automatically provisions SSL certificates for secure HTTPS access.
97+
98+
You can log in to the dashboard using the demo credentials created by the seed script:
99+
100+
- **Email**: `john.doe@marmelab.com`
101+
- **Password**: `changeme`
102+
103+
# Customizing the dashboard
104+
105+
Since the template creates a GitHub repository with the full source code, you can customize it however you like. Once your GitHub repository is connected, every push to your production branch automatically triggers a rebuild and deployment on Appwrite Sites. Here are a few ideas to get started:
106+
107+
## Customize authentication
108+
109+
The template already uses the official [`ra-appwrite`](https://github.com/marmelab/ra-appwrite) adapter, which provides both a Data Provider and an Auth Provider for Appwrite. Out of the box, it uses Appwrite's email and password authentication — the demo user created by the seed script is an example of this. You can extend the authentication to add role-based access control, restrict specific resources to certain users, or customize the login page to match your branding.
110+
111+
## Create new resources
112+
113+
The template comes with customers, orders, products, categories, invoices, and reviews. You can add new resources by:
114+
115+
1. Creating a new table in Appwrite TablesDB
116+
2. Adding the corresponding React Admin resource component
117+
3. Registering it in the app's resource configuration
118+
119+
React Admin's component library makes it straightforward to build list views, edit forms, and detail pages for any new entity.
120+
121+
## Connect to your own data
122+
123+
If you already have data in Appwrite (with the same schema), you can point the environment variables to your existing database and table IDs. You'll also need to update the `setup.ts` file and remove the `generateData` function so the seed script doesn't overwrite your existing data. Once done, your dashboard will work directly with your production data.
124+
125+
# Next steps
126+
127+
With the CRM dashboard deployed, you have a solid foundation for building internal tools on Appwrite. Here are some resources to continue:
128+
129+
- [Appwrite Sites documentation](/docs/products/sites)
130+
- [Appwrite Sites templates](/docs/products/sites/templates)
131+
- [React Admin documentation](https://marmelab.com/react-admin/documentation.html)
132+
- [Appwrite Discord server](https://appwrite.io/discord)

0 commit comments

Comments
 (0)