common-patterns

A collection of coding examples and conventions for a Next.js application using Supabase, a hosted database service, and ShadCN/UI components.

In plain words
What is it for?
Use it when implementing or reviewing Supabase queries, Next.js server components, loading states, or ShadCN/UI patterns.
Why use it?
It gives an agent established examples for database access, server-side data loading, database wake-up states, and UI components.

Cursor rule for Cursor

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add rules/smeubank/cursor-template/common-patterns
Clone the repo
git clone --depth 1 https://github.com/smeubank/cursor-template

Made for: Cursor.

Per session 2,198 This file is loaded in full into every session.
When invoked 2,198 The same file — it is already loaded in full.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.02198 $0.02198
Opus 5 $0.01099 $0.01099
Sonnet 5 $0.00440 $0.00440
Haiku 4.5 $0.00220 $0.00220

Measured 2d ago against content hash 6168dd7e19ee, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

common-patterns scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.cursor/rules/common-patterns.mdc · 348 lines

How it starts

The opening of the file, as written. The whole thing — 348 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Common Patterns

🗃️ Database Access Patterns

Database Client Pattern

// src/lib/database.ts
import { createClient } from '@supabase/supabase-js'

export const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)

Server Component Data Fetching

// app/page.tsx
import { supabase } from '@/lib/database'

export default async function Page() {
  const { data, error } = await supabase
    .from('business_hours')
    .select('*')
    .order('day_of_week')
  
  if (error) {
    throw new Error(`Failed to fetch business hours: ${error.message}`)
  }
  
  return <BusinessHours data={data} />
}

Database Sleep State Handling

// components/DatabaseWakingUp.tsx
export function DatabaseWakingUp({ children }: { children: React.ReactNode }) {
  const [isWaking, setIsWaking] = useState(false)
  
  // Handle database wake-up logic
  // Show loading state while database initializes
  
  return isWaking ? <WakingUpSpinner /> : children
}

🎨 UI Component Patterns

ShadCN/UI Integration

// components/ui/button.tsx
import { cn } from '@/lib/utils'
import { cva } from 'class-variance-authority'

const buttonVariants = cva(
  'inline-flex items-center justify-center rounded-md text-sm font-medium',
  {
    variants: {
      variant: {
        default: 'bg-primary text-primary-foreground hover:bg-primary/90',
        brand: 'bg-brand-primary text-white hover:bg-brand-primary/90',
      },
    },
    defaultVariants: {
      variant: 'default',
    },
  }
)

Form Validation Pattern

// components/ContactForm.tsx
import { useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import { z } from 'zod'

const contactSchema = z.object({
  name: z.string().min(2, 'Name must be at least 2 characters'),
  email: z.string().email('Invalid email address'),
  message: z.string().min(10, 'Message must be at least 10 characters'),
})

export function ContactForm() {
  const form = useForm<z.infer<typeof contactSchema>>({
    resolver: zodResolver(contactSchema),
  })
  
  const onSubmit = async (data: z.infer<typeof contactSchema>) => {
    // Handle form submission with Sentry logging
  }
}

Read the full file on GitHub · 348 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 348 lines · 2,198 tokens per session scan A 6168dd7e19ee

Subscribe to this mod's changes

common-patterns is a cursor rule published in the GitHub repository smeubank/cursor-template (6 stars, last pushed 1y ago), licensed MIT. It adds 2,198 tokens to every session, about $0.0110 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.