A production-ready SvelteKit application scaffolded with Svelte 5, TypeScript (strict mode), and Tailwind CSS v4 using the Vite plugin.
/Users/ayushj/Desktop/Coding_Assessment_EC/
├── src/
│ ├── lib/
│ │ ├── components/
│ │ │ └── ui/ # Reusable UI components
│ │ ├── stores/ # Svelte stores for state management
│ │ ├── services/ # API services and business logic
│ │ ├── types/ # TypeScript type definitions
│ │ ├── utils/ # Utility functions and helpers
│ │ └── index.ts # Library exports
│ ├── routes/
│ │ ├── +layout.svelte # Root layout with CSS import
│ │ └── +page.svelte # Homepage with demo content
│ ├── app.css # Tailwind directives and custom theme
│ └── app.d.ts # TypeScript ambient declarations
├── static/ # Static assets
├── .env # Environment variables (gitignored)
├── .env.example # Environment variables template
├── svelte.config.js # SvelteKit configuration
├── vite.config.ts # Vite configuration with Tailwind plugin
├── tsconfig.json # TypeScript configuration (strict mode)
└── package.json # Project dependencies
Copy .env.example to .env and fill in your actual values:
VITE_TMDB_API_KEY=your_tmdb_api_key_here
VITE_SUPABASE_URL=your_supabase_url_here
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key_here
This project uses Tailwind CSS v4 with the Vite plugin for optimal performance. The configuration includes:
Custom CSS variables defined in /Users/ayushj/Desktop/Coding_Assessment_EC/src/app.css:
--color-primary: #e50914 /* Netflix red */
--color-secondary: #f5f5f1 /* Off-white */
--color-background: #141414 /* Dark background */
--color-surface: #1f1f1f /* Card/surface background */
--color-text-primary: #ffffff /* Primary text */
--color-text-secondary: #b3b3b3 /* Secondary text */
--color-accent: #ff0000 /* Accent red */
--color-hover: #c11119 /* Hover state */
--color-border: #2a2a2a /* Border color */
--font-family-bebas: 'Bebas Neue', sans-serif
--font-family-outfit: 'Outfit', sans-serif
Use them in your components:
<h1 class="font-bebas text-4xl">Heading</h1>
<p class="font-outfit text-base">Body text</p>
npm run dev
Opens at http://localhost:5173 by default.
npm run build
npm run preview
npm run check
npm run check:watch
Install dependencies (already done):
npm install
Configure environment variables:
.env.example to .envStart development server:
npm run dev
Open your browser:
Navigate to http://localhost:5173 to see the demo page
Create /Users/ayushj/Desktop/Coding_Assessment_EC/src/lib/services/supabase.ts:
import { createClient } from '@supabase/supabase-js';
import { VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY } from '$env/static/public';
export const supabase = createClient(VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY);
Define your data models in /Users/ayushj/Desktop/Coding_Assessment_EC/src/lib/types/:
// models.ts
export interface User {
id: string;
email: string;
created_at: string;
}
export interface Movie {
id: number;
title: string;
overview: string;
poster_path: string;
}
Create reusable components in /Users/ayushj/Desktop/Coding_Assessment_EC/src/lib/components/ui/:
<!-- Button.svelte -->
<script lang="ts">
export let variant: 'primary' | 'secondary' = 'primary';
</script>
<button
class={variant === 'primary'
? 'bg-[var(--color-primary)] hover:bg-[var(--color-hover)]'
: 'border-2 border-[var(--color-border)]'}
class="px-6 py-3 rounded-md font-outfit transition-colors"
>
<slot />
</button>
Create stores in /Users/ayushj/Desktop/Coding_Assessment_EC/src/lib/stores/:
// user.svelte.ts
import { writable } from 'svelte/store';
import type { User } from '$lib/types';
export const user = writable<User | null>(null);
This project uses strict TypeScript with the following settings:
strict: true - Maximum type safetyesModuleInterop: true - Better module compatibilityforceConsistentCasingInFileNames: true - File naming consistencyskipLibCheck: true - Faster buildsmoduleResolution: bundler - Optimized for bundlersTailwind v4 introduces several improvements:
VITE_ for client-side accessThis project is open source and available under the MIT License.