{service.title}
{service.text}
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 (
Start a project Primora Studio creates precise digital experiences for ambitious businesses — from the first pixel to long-term growth.
The name says it all.
We bring that standard to every engagement: thoughtful design, disciplined development and work that earns its place.
What we do
A focused stack of services that follows the way digital projects actually grow.
{service.text}
Our approach
Good work starts by knowing what matters — and removing everything that doesn't.
Every typeface, interaction and detail should move the experience forward.
Fast, maintainable and scalable foundations, not disposable launch-day websites.
Have something worth building?