import React, { useEffect, useRef, useState } from "react"; import { createRoot } from "react-dom/client"; import "./styles.css"; const services = [ { number: "01", title: "Web Design & Development", text: "High-performance websites designed to make the right first impression — and built to convert.", tag: "Build" }, { number: "02", title: "Web Application Development", text: "Custom digital products for businesses that need more than a brochure site.", tag: "Product" }, { number: "03", title: "Brand & Graphic Design", text: "Distinct visual identities and systems that give every digital touchpoint a clear point of view.", tag: "Identity" }, { number: "04", title: "SEO & Content Strategy", text: "Search-led strategy and useful content that compound visibility long after launch.", tag: "Visibility" }, { number: "05", title: "Digital Marketing", text: "Focused campaigns, funnels and paid acquisition built around measurable business outcomes.", tag: "Growth" }, { number: "06", title: "Social Media Handling", text: "Consistent channel management that keeps the brand sharp, active and unmistakably yours.", tag: "Ongoing" }, { number: "07", title: "Managed Hosting & Security", text: "Reliable infrastructure, maintenance and protection that keeps everything running.", tag: "Care" } ]; function Arrow({ external = false }) { return ( ); } function App() { const cursorRef = useRef(null); useEffect(() => { const revealItems = document.querySelectorAll(".reveal"); const observer = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { entry.target.classList.add("is-visible"); observer.unobserve(entry.target); } }); }, { threshold: 0.12 } ); revealItems.forEach((el) => observer.observe(el)); const moveCursor = (e) => { if (!cursorRef.current) return; cursorRef.current.style.transform = `translate3d(${e.clientX}px, ${e.clientY}px, 0)`; }; window.addEventListener("pointermove", moveCursor); return () => { observer.disconnect(); window.removeEventListener("pointermove", moveCursor); }; }, []); const scrollTo = (id) => { document.getElementById(id)?.scrollIntoView({ behavior: "smooth" }); }; return (
Primora Studio Start a project
Independent digital studio

First in class.
Built with intent.

Primora Studio creates precise digital experiences for ambitious businesses — from the first pixel to long-term growth.

Start a project
Operating globally © {new Date().getFullYear()} Primora Studio
/ 01

The name says it all.

Primora comes from primus — leading, foremost, of the highest order.

We bring that standard to every engagement: thoughtful design, disciplined development and work that earns its place.

Editorial. Precise. Confident. Restrained. Direct.
/ 02

What we do

One studio.
Every layer.

A focused stack of services that follows the way digital projects actually grow.

{services.map((service, index) => (
{service.number}
{service.tag}

{service.title}

{service.text}

))}
/ 03

Our approach

Less noise.
More signal.

01

Clarity first

Good work starts by knowing what matters — and removing everything that doesn't.

02

Design with purpose

Every typeface, interaction and detail should move the experience forward.

03

Build to last

Fast, maintainable and scalable foundations, not disposable launch-day websites.

/ 04

Have something worth building?

Let's make it
first in class.

Primora Studio
Operating globally Primora Studio — First in class. © {new Date().getFullYear()} Primora Studio. All rights reserved.
); } createRoot(document.getElementById("root")).render(); function ContactForm() { const [name, setName] = useState(""); const [email, setEmail] = useState(""); const [service, setService] = useState(""); const [notes, setNotes] = useState(""); const handleSubmit = (e) => { e.preventDefault(); if (!email || !service) { alert("Please provide your email and service requirement."); return; } const subject = `Website inquiry from ${name || "Anonymous"}`; const body = `Name: ${name}\nEmail: ${email}\nService requirement: ${service}\n\nAdditional notes:\n${notes || "None"}`; const mailto = `mailto:hello@primorastudio.com?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; window.location.href = mailto; }; return (
setName(e.target.value)} placeholder="Your name" />
setEmail(e.target.value)} placeholder="you@example.com" required />