AI-generated UI components with 13 component types, data binding from any source, template variables, and real-time updates.
You need to see how your business is performing. Revenue trends, customer acquisition, churn rates, product usage. The data's all there in your databases, but building a dashboard means hours of configuring charts, writing queries, tweaking layouts.
What if you could just... describe what you want to see?
"Show me monthly revenue for the last 12 months, top 10 customers by spend, and a table of recent signups with their plan and status."
*Generates SQL queries, creates line chart for revenue, bar chart for customers, table for signups*
"Here's your dashboard. It updates every 5 minutes with fresh data. Want me to adjust anything?"
"Add a churn prediction score for each customer. Use the ML model we built last week."
*Adds column to table calling Python ML model, adds color badges for risk level*
"Updated. High-risk customers are highlighted in red. The dashboard now shows churn probability for each account."
"Perfect. Can I share this with my team?"
"Here's your shareable link: awareness.app/d/revenue-overview. Anyone on your team can view it."
This isn't magic. This is collaboration.
No drag-and-drop builders. No manual chart configuration. Just describe what you want to see and your Awareness builds it.
Interactive visualizations
Paginated data grids
KPI metric displays
User input collection
Vertical item lists
Network visualizations
Rich text rendering with GitHub-flavored Markdown
{
"type": "markdown",
"content": "# Hello\n\nThis is **bold**"
}Syntax-highlighted code blocks
{
"type": "code",
"content": "SELECT * FROM users",
"language": "sql",
"showLineNumbers": true
}Custom HTML templates with Tailwind CSS and variable interpolation
{
"type": "html",
"template": "<div class='text-xl'>{{name}}</div>",
"variables": { "name": "John" }
}User-defined React components registered in the component registry
Layout containers
Render based on data
Component reuse
Components can bind to multiple data source types with automatic refresh:
// Query data store
{
"type": "query",
"storeId": "postgres_main",
"query": "SELECT * FROM users WHERE active = true",
"params": [],
"refreshInterval": 30000 // 30 seconds
}
// Static data
{
"type": "static",
"data": [
{ "name": "Alice", "score": 95 },
{ "name": "Bob", "score": 87 }
]
}
// API endpoint
{
"type": "api",
"endpoint": "https://api.example.com/metrics",
"refreshInterval": 60000
}
// Multi-source (parallel fetch)
{
"type": "multi",
"sources": {
"users": { "type": "query", "storeId": "postgres", "query": "SELECT * FROM users" },
"stats": { "type": "api", "endpoint": "/api/stats" }
}
}
// Join (combine sources)
{
"type": "join",
"join": {
"left": { "type": "query", "storeId": "postgres", "query": "SELECT * FROM orders" },
"right": { "type": "query", "storeId": "postgres", "query": "SELECT * FROM users" },
"on": { "leftKey": "userId", "rightKey": "id" },
"type": "inner"
}
}
// Transform (apply JS expression)
{
"type": "query",
"storeId": "postgres",
"query": "SELECT * FROM sales",
"transform": "data.map(d => ({ ...d, total: d.quantity * d.price }))"
}
// Aggregate (group by + metrics)
{
"type": "query",
"storeId": "postgres",
"query": "SELECT * FROM transactions",
"aggregate": {
"groupBy": ["category"],
"metrics": [
{ "field": "amount", "function": "sum", "as": "total" },
{ "field": "id", "function": "count", "as": "count" }
]
}
}Use {{field.path}} to access data fields in component definitions:
// Chart example
{
"type": "chart",
"chartType": "line",
"xAxis": "date",
"yAxis": ["revenue", "profit"],
"title": "Revenue vs Profit"
}
// Data: [{ date: "2024-01", revenue: 1000, profit: 200 }, ...]
// Card with trend
{
"type": "card",
"valueField": "total",
"format": "currency",
"currency": "USD",
"trend": {
"field": "total",
"compareField": "lastMonth",
"goodDirection": "up"
}
}
// Table with custom columns
{
"type": "table",
"columns": [
{ "field": "name", "header": "Name", "sortable": true },
{ "field": "email", "header": "Email", "type": "link" },
{ "field": "status", "header": "Status", "type": "badge" }
]
}
// HTML template
{
"type": "html",
"template": "<div class='flex gap-4'><div class='font-bold'>{{name}}</div><div class='text-neutral-600'>{{email}}</div></div>"
}{
"name": "Sales Dashboard",
"description": "Real-time sales metrics and trends",
"components": [
{
"id": "total_revenue",
"type": "card",
"title": "Total Revenue",
"valueField": "revenue",
"format": "currency",
"currency": "USD",
"icon": "💰",
"dataSource": {
"type": "query",
"storeId": "postgres_main",
"query": "SELECT SUM(amount) as revenue FROM sales WHERE date >= CURRENT_DATE - INTERVAL '30 days'",
"refreshInterval": 60000
}
},
{
"id": "revenue_chart",
"type": "chart",
"title": "Revenue by Day",
"chartType": "line",
"xAxis": "date",
"yAxis": ["revenue"],
"showGrid": true,
"dataSource": {
"type": "query",
"storeId": "postgres_main",
"query": "SELECT date, SUM(amount) as revenue FROM sales WHERE date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY date ORDER BY date"
}
},
{
"id": "top_products",
"type": "table",
"title": "Top Products",
"columns": [
{ "field": "product", "header": "Product", "sortable": true },
{ "field": "quantity", "header": "Qty Sold", "type": "number" },
{ "field": "revenue", "header": "Revenue", "type": "number" }
],
"dataSource": {
"type": "query",
"storeId": "postgres_main",
"query": "SELECT product, COUNT(*) as quantity, SUM(amount) as revenue FROM sales WHERE date >= CURRENT_DATE - INTERVAL '30 days' GROUP BY product ORDER BY revenue DESC LIMIT 10"
}
}
],
"layout": {
"type": "grid",
"columns": 3,
"gap": "4",
"placements": [
{ "componentId": "total_revenue", "col": 1, "row": 1, "colSpan": 1, "rowSpan": 1 },
{ "componentId": "revenue_chart", "col": 1, "row": 2, "colSpan": 3, "rowSpan": 1 },
{ "componentId": "top_products", "col": 1, "row": 3, "colSpan": 3, "rowSpan": 1 }
]
}
}list_componentsList all component definitions
create_componentCreate component from JSON definition
create_dashboardCreate dashboard with layout
add_placementAdd component to dashboard grid
update_data_sourceChange component data binding
export_dashboardExport to PDF/PNG