diff --git a/apps/learn/app/(app)/page.tsx b/apps/learn/app/(app)/page.tsx
index d2fae7dd40f..66108788d12 100644
--- a/apps/learn/app/(app)/page.tsx
+++ b/apps/learn/app/(app)/page.tsx
@@ -1,6 +1,6 @@
import { WhatWillILearn } from '@/components/what-will-i-learn'
import Link from 'next/link'
-import { Activity, BookOpen, Database, Gauge, Wrench } from 'lucide-react'
+import { BookOpen, Database } from 'lucide-react'
import { Badge, Button, Card, CardDescription, CardHeader } from 'ui'
// Horizontal grid line component
@@ -19,31 +19,6 @@ export default function Home() {
icon: Database,
level: 'Beginner',
},
- {
- id: 2,
- title: 'Project: Smart Office',
- description: 'Build a realtime room-booking dashboard using Supabase.',
- chapters: 15,
- icon: Activity,
- level: 'Intermediate',
- },
- {
- id: 3,
- title: 'Supabase Internals: Performance & Scaling',
- description: 'Learn how to profile queries, tune indexes, and scale Postgres with Supabase.',
- chapters: 20,
- icon: Gauge,
- level: 'Advanced',
- },
- {
- id: 4,
- title: 'Supabase Internals: Debugging & Operations',
- description:
- 'Understand how to diagnose slow queries, use read replicas, and manage production workloads.',
- chapters: 20,
- icon: Wrench,
- level: 'Advanced',
- },
]
return (
diff --git a/apps/learn/components/what-will-i-learn.tsx b/apps/learn/components/what-will-i-learn.tsx
index 4be8a0522c2..8c71b336dd5 100644
--- a/apps/learn/components/what-will-i-learn.tsx
+++ b/apps/learn/components/what-will-i-learn.tsx
@@ -1,14 +1,4 @@
-import {
- BarChart3,
- CalendarRange,
- Database,
- History,
- Lock,
- Network,
- Rocket,
- Timer,
-} from 'lucide-react'
-import Image from 'next/image'
+import { Database, Lock, Network, Rocket } from 'lucide-react'
import { Card, CardDescription, CardHeader, CardTitle } from 'ui'
const learningTracks = [
@@ -83,56 +73,6 @@ export function WhatWillILearn() {
)
})}
-
-
Smart Office project
-
- In the Smart Office project, you'll learn how to build a full-featured Dashboard:
-
-
-
-
-
-
-
- -
-
-
-
- Real-time room monitoring that tracks live occupancy, sensor readings
-
- -
-
-
-
- Booking management with live status filters, calendar integrations.
-
- -
-
-
-
-
- Advanced analytics that surface 30+ days of utilization trends and patterns.
-
-
- -
-
-
-
-
- Detect capacity issues, open facilities tasks, and track resolution SLAs without
- leaving the app.
-
-
-
-
-
-
)
}
diff --git a/apps/learn/config/docs.ts b/apps/learn/config/docs.ts
index f65e051d378..78179a90920 100644
--- a/apps/learn/config/docs.ts
+++ b/apps/learn/config/docs.ts
@@ -7,7 +7,6 @@ export const courses: SidebarNavGroup = {
title: 'Foundations',
href: '/foundations',
items: [
- // ✅ Always visible (no requiresAuth)
{
title: 'Introduction',
href: '/foundations/introduction',
@@ -40,7 +39,6 @@ export const courses: SidebarNavGroup = {
title: 'Edge Functions',
href: '/foundations/edge-functions',
},
-
{
title: 'Vector Search',
href: '/foundations/vector',
@@ -48,21 +46,6 @@ export const courses: SidebarNavGroup = {
],
commandItemLabel: 'Foundations',
},
- {
- title: 'Project: Smart Office',
- href: '/projects/smart-office',
- commandItemLabel: 'Project: Smart Office',
- },
- {
- title: 'Performance & Scaling',
- href: '/internals/performance-scaling',
- commandItemLabel: 'Supabase Internals: Performance & Scaling',
- },
- {
- title: 'Debugging & Operations',
- href: '/internals/debugging-operations',
- commandItemLabel: 'Supabase Internals: Debugging & Operations',
- },
],
}
diff --git a/apps/learn/content/internal/foundations/grafana.mdx b/apps/learn/content/internal/foundations/grafana.mdx
deleted file mode 100644
index b756b9a1350..00000000000
--- a/apps/learn/content/internal/foundations/grafana.mdx
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: Grafana
-description: 'Learn how to use Grafana'
-chapterNumber: 8
----
-
-This is an internal guide for Grafana.
-It doesn't have an external equivalent.
diff --git a/apps/learn/content/internal/foundations/realtime.mdx b/apps/learn/content/internal/foundations/realtime.mdx
deleted file mode 100644
index 82de849b829..00000000000
--- a/apps/learn/content/internal/foundations/realtime.mdx
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Realtime
-description: 'Learn how to build real-time applications with Supabase.'
-chapterNumber: 6
----
-
-This is the internal realtime guide.
diff --git a/apps/learn/content/platform/platform-kit.mdx b/apps/learn/content/platform/platform-kit.mdx
deleted file mode 100644
index 85ec55eb21c..00000000000
--- a/apps/learn/content/platform/platform-kit.mdx
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: Platform Kit
-description: The easiest way to build platforms on top of Supabase
----
-
-
-
-## Installation
-
-See the [Supabase Platform Kit documentation](https://supabase.com/docs) for installation instructions.
-
-## Introduction
-
-The Platform Kit is a collection of customizable API's, hooks and components you can use to provide an embedded Supabase experience within your own platform. It comes in the form of a single dialog that enables the management of database, authentication, storage, users, secrets, logs, and performance monitoring.
-
-**Features**
-
-- Database, Auth, Storage, User, Secrets, Logs, and Performance management
-- Responsive dialog/drawer interface (desktop & mobile)
-- API proxy for Management API
-- AI-powered SQL generation (optional)
-- Customize to your liking
-
-## Who is it for
-
-Anyone who is providing Postgres databases to their users.
-
-## Usage
-
-Embed the manager dialog in your app and manage its state:
-
-```tsx
-import { useState } from 'react'
-import { useMobile } from '@/hooks/use-mobile'
-import { Button } from '@/components/ui/button'
-import SupabaseManagerDialog from '@/components/supabase-manager'
-
-export default function Example() {
- const [open, setOpen] = useState(false)
- const projectRef = 'your-project-ref' // Replace with your actual project ref
- const isMobile = useMobile()
-
- return (
- <>
-
-
- >
- )
-}
-```
-
-## Quick Start
-
-1. **Set up environment variables:** in your `.env.local` file:
-
- ```bash
- SUPABASE_MANAGEMENT_API_TOKEN=your-personal-access-token
- NEXT_PUBLIC_ENABLE_AI_QUERIES=true
- OPENAI_API_KEY=your-openai-api-key
- ```
-
-2. **Add project-level authentication checks** in your API proxy at `app/api/supabase-proxy/[...path]/route.ts` as well as your ai/sql route at `app/api/ai/sql/route.ts` to ensure only authorized users can access their own project resources.
-
-3. **Add a Toaster for notifications:**
- Place the following component at the root of your app (e.g., in your `layout.tsx` or `App.tsx`) to enable toast notifications:
-
- ```tsx
- import { Toaster } from '@/components/ui/sonner'
-
- export default function RootLayout({ children }) {
- return (
-
-
-
- {children}
-
-
-
- )
- }
- ```
-
-That's it! The default setup uses your Supabase personal access token for the Management API.
-
-## Security
-
-- Never expose your Management API token to the client
-- Always implement authentication and permission checks in your proxy
-
-## Further reading
-
-- [Supabase Management API](https://supabase.com/docs/reference/api/introduction)
diff --git a/apps/learn/context/framework-context.tsx b/apps/learn/context/framework-context.tsx
index 9854b2d8a56..046fe22ed53 100644
--- a/apps/learn/context/framework-context.tsx
+++ b/apps/learn/context/framework-context.tsx
@@ -2,7 +2,7 @@
import { createContext, useContext, useEffect, useState } from 'react'
-type Course = 'foundations' | 'smart-office' | 'performance-scaling' | 'debugging-operations'
+type Course = 'foundations'
type CourseContextType = {
course: Course
setCourse: (course: Course) => void
@@ -16,18 +16,13 @@ export function FrameworkProvider({ children }: { children: React.ReactNode }) {
// Initialize from localStorage on mount (client-side only)
useEffect(() => {
const storedCourse = localStorage.getItem('preferredCourse')
- const validCourses: Course[] = [
- 'foundations',
- 'smart-office',
- 'performance-scaling',
- 'debugging-operations',
- ]
+ const validCourses: Course[] = ['foundations']
if (storedCourse && validCourses.includes(storedCourse as Course)) {
setCourseState(storedCourse as Course)
}
}, [])
- // Update localStorage when framework changes
+ // Update localStorage when course changes
const setCourse = (newCourse: Course) => {
setCourseState(newCourse)
localStorage.setItem('preferredCourse', newCourse)
diff --git a/apps/learn/public/img/smart-office.png b/apps/learn/public/img/smart-office.png
deleted file mode 100644
index c2a684ec6bd..00000000000
Binary files a/apps/learn/public/img/smart-office.png and /dev/null differ