import React, { useState, useEffect, useRef } from 'react'; import { Code, Gamepad2, Globe, Users, CheckCircle, Send, Menu, X, ExternalLink, Calendar, Zap, Layers, ChevronRight, Monitor, ChevronDown, ChevronUp } from 'lucide-react'; const useOnScreen = (options) => { const ref = useRef(null); const [isVisible, setIsVisible] = useState(false); useEffect(() => { const observer = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) { setIsVisible(true); observer.unobserve(entry.target); } }, options); if (ref.current) observer.observe(ref.current); return () => { if (ref.current) observer.unobserve(ref.current); }; }, [ref, options]); return [ref, isVisible]; }; const FadeIn = ({ children, delay = 0, className = "" }) => { const [ref, isVisible] = useOnScreen({ threshold: 0.1 }); return (
{children}
); }; const NavLink = ({ href, children, mobile, onClick }) => ( { if (onClick) onClick(e); }} className={` text-slate-400 hover:text-white transition-colors duration-300 text-sm font-medium tracking-wide px-3 py-2 rounded-lg hover:bg-slate-800/50 ${mobile ? 'block text-lg py-3 border-b border-slate-800 w-full text-center' : ''} `} > {children} ); const SectionTitle = ({ title, subtitle }) => (

{title}

{subtitle &&

{subtitle}

}
); function setFavicon(href) { if (!href) return; let link = document.querySelector("link[rel~='icon']"); if (!link) { link = document.createElement("link"); link.rel = "icon"; document.head.appendChild(link); } link.href = href; } function fmt(n) { const x = Number(n); if (!Number.isFinite(x)) return "—"; return x.toLocaleString(); } function imgPath(key) { return `/mainFolder/Images/${key}`; } const ExpandableGrid = ({ title, items, type, totals }) => { const [expanded, setExpanded] = useState(false); const visibleItems = expanded ? items : items.slice(0, 3); return (

{type === 'community' && } {type === 'website' && } {type === 'game' && } {title}

{type === "game" && totals && (
Total CCU: {fmt(totals.totalCcu)} Total Visits: {fmt(totals.totalVisits)}
)} {type === "community" && totals && (
Total Members: {fmt(totals.totalGroupMembers)}
)}
{visibleItems.map((item, idx) => (
{(type === 'community' || type === 'website' || type === 'game') && (
{item.iconUrl ? ( ) : (
{type === 'community' && } {type === 'website' && } {type === 'game' && }
)}

{item.name}

{item.badge && ( {item.badge} )} {type === "community" && Number.isFinite(Number(item.memberCount)) && ( Members: {fmt(item.memberCount)} )} {type === "game" && ( <> CCU: {fmt(item.playing)} Visits: {fmt(item.visits)} Rating: {item.ratingPercent == null ? "—" : `${item.ratingPercent}%`} )}
{item.href && ( )}
)}
))}
{items.length > 3 && ( )}
); }; export default function App() { const [isMenuOpen, setIsMenuOpen] = useState(false); const [scrolled, setScrolled] = useState(false); const [formData, setFormData] = useState({ discord: '', summary: '', type: 'New Game', deadline: '' }); const [formStatus, setFormStatus] = useState('idle'); const [formErrors, setFormErrors] = useState({}); const [api, setApi] = useState({ games: [], groups: [], websites: [], totals: { totalCcu: 0, totalVisits: 0, totalGroupMembers: 0 } }); const WORKER_BASE = ""; useEffect(() => { const handleScroll = () => setScrolled(window.scrollY > 50); window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); useEffect(() => { document.title = "savhana"; setFavicon(imgPath("WebsiteIcon")); }, []); useEffect(() => { let cancelled = false; async function load() { try { const r = await fetch(`${WORKER_BASE}/api/summary`, { headers: { accept: "application/json" } }); const d = await r.json(); if (!cancelled && d && d.ok) { const groups = (d.groups || []).map(g => ({ name: g.name || `Group ${g.groupId}`, badge: g.role || "", memberCount: g.memberCount, iconUrl: g.icon || null, href: `https://www.roblox.com/communities/${g.groupId}` })); const games = (d.games || []).map(g => ({ name: g.title || `Game ${g.placeId}`, badge: "Live", playing: g.playing, visits: g.visits, ratingPercent: g.ratingPercent, iconUrl: g.icon || null, href: `https://www.roblox.com/games/${g.placeId}` })); const websites = (d.websites || []).map(w => ({ name: w.name, badge: w.role || "", iconUrl: imgPath(w.iconKey || "SvStudios"), href: w.url })); setApi({ games, groups, websites, totals: d.totals || { totalCcu: 0, totalVisits: 0, totalGroupMembers: 0 } }); } } catch {} } load(); const t = setInterval(load, 60_000); return () => { cancelled = true; clearInterval(t); }; }, []); const handleInputChange = (field, value) => { setFormData(prev => ({ ...prev, [field]: value })); if (formErrors[field]) { const newErrors = { ...formErrors }; if (field === 'discord' && value.trim().length > 0) delete newErrors.discord; if (field === 'summary' && value.length >= 100) delete newErrors.summary; if (field === 'deadline' && value.trim().length > 0) delete newErrors.deadline; setFormErrors(newErrors); } }; const validateForm = () => { const errors = {}; if (!formData.discord.trim()) errors.discord = "Discord username is required"; if (formData.summary.length < 100) errors.summary = "Summary must be at least 100 characters"; if (!formData.deadline.trim()) errors.deadline = "Date is required"; return errors; }; const handleSubmit = async (e) => { e.preventDefault(); const errors = validateForm(); if (Object.keys(errors).length > 0) { setFormErrors(errors); return; } setFormErrors({}); setFormStatus('submitting'); try { const token = window.turnstile ? await new Promise((resolve) => { window.turnstile.render("#ts", { sitekey: window.__TURNSTILE_SITEKEY || "", callback: (t) => resolve(t), "error-callback": () => resolve("") }); }) : ""; const r = await fetch(`${WORKER_BASE}/api/apply`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ ...formData, turnstileToken: token }) }); const d = await r.json().catch(() => null); if (d && d.ok) { setFormStatus('success'); setFormData({ discord: '', summary: '', type: 'New Game', deadline: '' }); setTimeout(() => setFormStatus('idle'), 3000); } else { setFormStatus('idle'); } } catch { setFormStatus('idle'); } }; const remainingChars = 100 - formData.summary.length; return (
Accepting Commissions

Roblox Scripter

Professional, modular, and optimized Luau programming. Over 6 years of experience delivering high-quality systems with fast turnaround times.

Start a Project View Work

I am a fast, reliable scripter with over 6+ years active in the Roblox developer community. My focus is on writing code that isn't just functional, but scalable and easy to maintain.

I specialize in modular architecture, meaning the systems I build for you are easy to import, configure, and expand upon. Whether you need complex backend data stores or responsive UI interactions, I ensure optimization is a priority to keep your game running smoothly.

6+
Years Experience
Fast
Turnaround
{[ { icon: Zap, title: "Optimized Performance", desc: "Lag-free code practices" }, { icon: Layers, title: "Modular Architecture", desc: "Easy to edit & expand" }, { icon: Monitor, title: "Owner of SV Studios", desc: "svstudiosinfo.com" }, { icon: Users, title: "Community Leader", desc: "Group Owner & Manager" }, ].map((item, idx) => (

{item.title}

{item.desc}

))}

Scripting Services

Full system implementation, bug fixes, UI programming, and backend data management.

$30 – $45 /hr
R$ 9,000 – R$ 12,000 /hr
{[ "Clean, Annotated Code", "Modular Systems", "DataStore Security", "UI Animation & Logic", "Server-Client Optimization", "Bug Free" ].map((feat, i) => (
{feat}
))}

Request a Commission

Please fill out the details below accurately.

handleInputChange('discord', e.target.value)} className={`w-full bg-slate-900 border ${formErrors.discord ? 'border-red-500' : 'border-slate-700'} rounded-lg py-3 px-4 text-white placeholder-slate-600 focus:outline-none focus:border-indigo-500 transition-colors`} /> {formErrors.discord &&

{formErrors.discord}

}
handleInputChange('deadline', e.target.value)} className={`w-full bg-slate-900 border ${formErrors.deadline ? 'border-red-500' : 'border-slate-700'} rounded-lg py-3 pl-10 pr-4 text-white focus:outline-none focus:border-indigo-500 transition-colors`} />
{formErrors.deadline &&

{formErrors.deadline}

}
0 ? 'text-amber-500' : 'text-emerald-500'}`}> {remainingChars > 0 ? `${remainingChars} more chars needed` : 'Length OK'}
{formErrors.summary &&

{formErrors.summary}

}
); }