Template React 4 pages MIT

SPRAY — Art School

A premium four-page React + TypeScript template for SPRAY, a fictional street-art school where beginners learn graffiti, sketching, muralism, and stencil work from working artists. A raw DIY-zine visual language — Anton + Space Grotesk type, ink-black surfaces with neon-green and hot-pink accents, torn-paper dividers, spray-splatter decorations, a film-grain noise overlay, and Framer Motion reveal animations. Four route pages (home, work, about, contact) compose reusable typed sections and data (hero, selected work, courses, about, process roadmap, testimonials, CTA, footer) over react-router, Vite build, no external image assets.

  • React
  • TSX
  • Tailwind CSS
  • diy-zine-street-art
Pages
4 pages
Stack
React + TSX
Theme
Dark only
Responsive
Yes
Files
38
License
MIT

Preview

The whole site, live.

Scroll inside the frame, switch viewports, or open the raw preview in a new tab — it is the same file the CLI installs.

Interactive preview
New tab
devsnips.dev/templates/react/spray-art-school/
iPhone 390 × 844
Fluid 320 → 1920
React/Templates/spray-art-school Responsive · Dark only · MIT

What's inside

Everything the folder ships.

Straight from the registry's metadata — every line maps to a file you can open in the source tabs below.

  • four-page responsive React app (home, work, about, contact) over react-router-dom
  • do-it-yourself zine visual system: Anton display + Space Grotesk body, ink-black/navy + bone surfaces, single neon-green accent + hot-pink secondary
  • ragged torn-paper divider and clip-path spray-button silhouette, hang splatter SVG decorations, subtle film-grain noise overlay
  • Framer Motion scroll reveals on headlines, cards, and roadmap steps (reduced-motion friendly via transition definitions)
  • typed data-driven content arrays (projects, services, testimonials) — no hardcoded copy in the cards
  • sticky navbar with blur-on-scroll, mobile menu (aria-expanded), and a Sign-up CTA
  • hero with oversized clamp()-scaled display headline + spray CTA
  • selected-work gallery of student pieces with rotated cards and category badges (gradient placeholders — zero image assets)
  • five named courses with schedule metadata (basics, sketching, muralism, stencils, freedom)
  • five-step numbered roadmap (enroll → sketch → wall time → critique → show)
  • student testimonials grid with rotated quote cards
  • contact page with labelled form,intrinsic validation,anded success state (role=status)
  • theme-color metadata, semantic landmarks, heading hierarchy, visible focus-visible outline
  • React + TypeScript + Tailwind CSS via Vite with zero runtime dependencies beyond React, React Router, and Framer Motion

Technical

Stack, scripts, structure.

Everything you need to know before you install.

Stack
Framework React
Language TSX
Styling Tailwind CSS
Pages 4
Theme Dark only
Style diy-zine-street-art
Dependencies 4 runtime · 8 dev
Scripts npm
npm run dev vite
npm run build tsc -b && vite build
npm run preview vite preview
Files 38

root 11

  • .gitignore other
  • AGENTS.md doc
  • index.html code
  • metadata.json config
  • package-lock.json config
  • package.json config
  • postcss.config.js code
  • preview.html preview
  • README.md doc
  • tailwind.config.ts code
  • tsconfig.json config

src/ 27

  • App.tsx code
  • components/Badge.tsx code
  • components/Button.tsx code
  • components/Logo.tsx code
  • components/Navbar.tsx code
  • components/ProjectCard.tsx code
  • components/SectionHeading.tsx code
  • components/ServiceCard.tsx code
  • components/SplatterDecoration.tsx code
  • components/TornDivider.tsx code
  • data/projects.ts code
  • data/services.ts code
  • data/testimonials.ts code
  • main.tsx code
  • pages/About.tsx code
  • pages/Contact.tsx code
  • pages/Home.tsx code
  • pages/Work.tsx code
  • sections/About.tsx code
  • sections/CTA.tsx code
  • sections/Footer.tsx code
  • sections/Hero.tsx code
  • sections/Process.tsx code
  • sections/SelectedWork.tsx code
  • sections/Services.tsx code
  • sections/Testimonials.tsx code
  • styles/globals.css code

Install

One command, whole folder.

Pulls the template into your project through the DevSnips CLI. The registry path below is stable across the CLI, MCP server and Skills.

terminal · npm
npx devsnips add React/Templates/spray-art-school
registry path React/Templates/spray-art-school 38 files

AI-ready

Hand the whole job to your agent — Cursor, Cline, Claude Code or Windsurf. One prompt installs the template, fixes the theme toggle, optimises it and reshapes it for what you are building.

Scaffold the DevSnips template "SPRAY — Art School" (React/Templates/spray-art-school) into this project, then audit, fix and tailor it.

1. Install — if the DevSnips MCP server is connected, fetch the resource with get_resource(id="React/Templates/spray-art-school"). Otherwise run npx devsnips add React/Templates/spray-art-school and install the dependencies the template declares.

2. Audit — check the template end to end before changing anything: theme toggling (dark/light), responsive behaviour, accessibility, unused files and assets.

3. Fix — repair what the audit found, starting with the theme toggle: it must persist across reloads, never flash the wrong theme on first paint, and every component must read the same tokens in both modes.

4. Optimise and adapt — trim what the site does not need, then customise the template for the product being built here: replace the placeholder branding, copy, imagery, navigation and routes so it reads as this project rather than as a demo.

Source

Read it before you ship it.

The README, manifest and entry document — verbatim, straight from the registry.

README.md
# SPRAY — Art School Template

A four-page React + TypeScript template for **SPRAY**, a fictional street-art school where beginners learn graffiti, sketching, muralism, and stencil work from working artists. No clean corners, no boring classrooms.

Built with React, TypeScript, Tailwind CSS, react-router-dom, and Framer Motion, bundled by Vite. The template ships with **zero image assets** — every artwork slot is a labeled gradient placeholder, so it renders correctly out of the box.

## Design direction

**Raw DIY-zine street art** — a deliberate anti-gallery aesthetic:

- **Type:** Anton (condensed display, tight tracking) for headlines; Space Grotesk (body, 400–700) for copy.
- **Palette:** ink-black `#0a0a0f` surfaces, ink-navy panels, bone `#f2f0e6` text, one neon-green `#39FF14` primary accent, hot-pink `#ff2ec4` secondary accent.
- **Texture:** torn-paper divider strips (`TornDivider.tsx`), hanging spray-splatter SVG blobs (`SplatterDecoration.tsx`), a subtle fixed film-grain noise overlay, and clip-path spray-button silhouettes (`Button.tsx`).
- **Motion:** restrained Framer Motion reveals on headlines, cards, and roadmap steps; splatter blobs idle-float and torn strips drift.
- **Composition:** rotated cards and badges, an oversized `clamp()`-scaled headline, numbered roadmap only where the sequence is real (enroll → sketch → wall time → critique → show).

The visual system lives entirely in `tailwind.config.ts` (colors, fonts, keyframes), `src/styles/globals.css`, and the presentational components — it does not depend on the shared DevSnips `--ds-*` tokens.



## Pages

| Route | File | Composition |
| --- | --- | --- |
| `/` | `src/pages/Home.tsx` | Hero, Selected Work, Courses, About, Roadmap, Testimonials, CTA, Footer |
| `/work` | `src/pages/Work.tsx` | Section heading + full Selected Work archive, CTA, Footer |
| `/about` | `src/pages/About.tsx` | About, Roadmap, Testimonials, CTA, Footer |
| `/contact` | `src/pages/Contact.tsx` | Labelled contact form with validation + success state, Footer |

## Structure

```text
spray-art-school/
├── index.html                 # Vite entry (theme-color, root mount)
├── preview.html               # self-contained static preview of the whole site (open directly)
├── package.json               # React 18, React Router 6, Framer Motion 11, Vite 5
├── tailwind.config.ts         # colors, fonts, animation keyframes
├── postcss.config.js
├── tsconfig.json              # strict TypeScript
└── src/
    ├── main.tsx              # BrowserRouter + StrictMode mount
    ├── App.tsx               # Navbar + routed pages + noise overlay
    ├── components/           # Navbar, Button, Logo, Badge, ProjectCard, ServiceCard,
    │                            SectionHeading, TornDivider, SplatterDecoration
    ├── sections/              # Hero, SelectedWork, Services, About, Process,
    │                            Testimonials, CTA, Footer
    ├── pages/                # Home, Work, About, Contact
    ├── data/                 # Typed content arrays: projects, services, testimonials
    └── styles/
        └── globals.css        # Google Fonts, Tailwind layers, noise texture, clip-paths
```

## Setup & run

Requires Node.js + npm. From the template root:

```bash
npm install
npm run dev        # Vite dev server — open the printed URL (usually http://localhost:5173)
```

Production build + local preview:

```bash
npm run build      # tsc type-check + Vite production build → dist/
npm run preview     # serve the built app
```

**Static preview:** `preview.html` at the template root is a fully self-contained
static prototype of the whole site (Tailwind CDN + hash-routed home/work/about/
contact, working mobile menu and contact form, scroll reveals). Open it directly
in a browser or serve the folder — no build step needed. It mirrors the real
app's markup and design system so you can preview the template without
installing dependencies.

## Sections & components

- **Navbar** — sticky header that gains a blurred ink backdrop on scroll; mobile menu toggles `aria-expanded` and swaps ☰/✕ icons; Sign-up CTA.
- **Hero** — oversized clamp()-scaled “ART / SCHOOL” display, torn divider, lede, spray CTA, floating splatters.

- **SelectedWork** — responsive grid of rotated student-piece cards (gradient placeholder, category badge, student + year).
- **Services** — five course cards with bullets and schedule metadata (Basics, Sketching, Muralism, Stencils, Freedom).
- **About** — oversized manifesto pull-copy with neon/pink emphasis words, splat decoration.

- **Process** — five-step numbered roadmap (Enroll → Sketch → Wall time → Critique → Show) on a vertical/horizontal timeline.

- **Testimonials** — three rotated quote cards with student name + course.
- **CTA** — centered display call-to-action with spray Button..
- **Footer** — logo, social links, auto-year copyright.
- **Contact page** — labelled Name/Email/Message form with native required validation; submit swaps to a `role="status"` success message.



## Customization

- **Content:** edit the typed arrays in `src/data/` (projects, services, testimonials) — card copy never lives in the components themselves.
- **Re-theme:** colors, fonts, and keyframes are defined once in `tailwind.config.ts` and the base styles in `src/styles/globals.css`; swapping the palette re-colors every section consistently.


- **Real artwork:** drop image files into `src/assets/images/`and replace the placeholder blocks in `ProjectCard.tsx` with `<img>` tags when ready. The scaffold intentionally ships asset-free so it always renders without broken images.
- **Add a page:** create a `src/pages/*.tsx` route, compose existing sections, and register it in `src/App.tsx`.



## Accessibility

- Semantic landmarks (`header`, `main`, `section`, `footer`, `nav`, `form`).
- Single `h1` per page; descriptive `h2` section headings with eyebrows..
- Mobile menu wired with `aria-expanded`; contact form labels tied via `htmlFor`/`id`; the success message uses `role="status"`.
- Global `:focus-visible` dashed outline; decorative SVGs (`SplatterDecoration`, `TornDivider`) are `aria-hidden`.
- Reduced-motion: Framer Motion transitions resolve instantly under `prefers-reduced-motion`; CSS animations are purely cosmetic, and the noise overlay is static.



## Browser support

Modern evergreen browsers (Chrome, Firefox, Safari, Edge). Requires JS for routing and animations; no legacy-IE support.
117 lines UTF-8 · LF