@@ -40,7 +40,7 @@ import LogoPattern from "../assets/logo-pattern.png";
4040 <div class =" mx-auto max-w-7xl" >
4141 <div class =" flex flex-col items-center justify-between lg:flex-row" >
4242 <div class =" mb-8 text-center lg:mb-0 lg:w-1/2 lg:text-left" >
43- <h1 class =" text-4xl md: text-6xl font-bold mb-6 text-white " >
43+ <h1 class =" mb-6 text-4xl font-bold text-white md: text-6xl " >
4444 Software Development Partner
4545 </h1 >
4646 <p class =" mb-8 text-xl leading-relaxed text-gray-300 md:text-2xl" >
@@ -71,29 +71,61 @@ import LogoPattern from "../assets/logo-pattern.png";
7171 <div class =" mx-auto max-w-7xl px-4 sm:px-6 lg:px-8" >
7272 <div class =" mb-12 text-center" >
7373 <h2 class =" mb-4 text-3xl font-bold md:text-4xl" >What We Do</h2 >
74- <p class =" text-lg text-gray-300" >Pragmatic engineering to ship, scale, and sustain products</p >
74+ <p class =" text-lg text-gray-300" >
75+ Pragmatic engineering to ship, scale, and sustain products
76+ </p >
7577 </div >
7678
7779 <div class =" grid gap-8 md:grid-cols-4" >
7880 <!-- Selector -->
7981 <div class =" md:col-span-1" >
8082 <div role =" tablist" aria-label =" Services" class =" flex flex-col gap-2" >
81- <button data-service-button =" web" role =" tab" aria-selected =" true" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
83+ <button
84+ data-service-button =" web"
85+ role =" tab"
86+ aria-selected =" true"
87+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
88+ >
8289 Web Applications
8390 </button >
84- <button data-service-button =" extensions" role =" tab" aria-selected =" false" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
91+ <button
92+ data-service-button =" extensions"
93+ role =" tab"
94+ aria-selected =" false"
95+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
96+ >
8597 Niche Extensions
8698 </button >
87- <button data-service-button =" ai" role =" tab" aria-selected =" false" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
99+ <button
100+ data-service-button =" ai"
101+ role =" tab"
102+ aria-selected =" false"
103+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
104+ >
88105 AI & LLM Apps
89106 </button >
90- <button data-service-button =" blockchain" role =" tab" aria-selected =" false" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
107+ <button
108+ data-service-button =" blockchain"
109+ role =" tab"
110+ aria-selected =" false"
111+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
112+ >
91113 Blockchain & Smart Contracts
92114 </button >
93- <button data-service-button =" legacy" role =" tab" aria-selected =" false" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
115+ <button
116+ data-service-button =" legacy"
117+ role =" tab"
118+ aria-selected =" false"
119+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
120+ >
94121 Legacy System Recovery
95122 </button >
96- <button data-service-button =" cost" role =" tab" aria-selected =" false" class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:outline-none focus:ring-2 focus:ring-blue-600" >
123+ <button
124+ data-service-button =" cost"
125+ role =" tab"
126+ aria-selected =" false"
127+ class =" cursor-pointer rounded-lg border border-gray-700 px-4 py-3 text-left text-gray-200 hover:border-blue-500 hover:text-white focus:ring-2 focus:ring-blue-600 focus:outline-none"
128+ >
97129 Cost Optimization
98130 </button >
99131 </div >
@@ -103,10 +135,13 @@ import LogoPattern from "../assets/logo-pattern.png";
103135 <div class =" md:col-span-3" >
104136 <div class =" rounded-lg bg-gray-800 p-8 shadow-lg" >
105137 <div data-service-panel =" web" >
106- <h3 class =" mb-3 text-2xl font-bold text-white" >Web Applications</h3 >
138+ <h3 class =" mb-3 text-2xl font-bold text-white" >
139+ Web Applications
140+ </h3 >
107141 <p class =" text-gray-300" >
108- Product discovery, architecture, and implementation of robust web apps using modern frameworks.
109- We focus on clear domain models, great UX, and maintainable code.
142+ Product discovery, architecture, and implementation of robust
143+ web apps using modern frameworks. We focus on clear domain
144+ models, great UX, and maintainable code.
110145 </p >
111146 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
112147 <li >End-to-end feature delivery</li >
@@ -116,9 +151,13 @@ import LogoPattern from "../assets/logo-pattern.png";
116151 </div >
117152
118153 <div data-service-panel =" extensions" class =" hidden" >
119- <h3 class =" mb-3 text-2xl font-bold text-white" >Niche Extensions</h3 >
154+ <h3 class =" mb-3 text-2xl font-bold text-white" >
155+ Niche Extensions
156+ </h3 >
120157 <p class =" text-gray-300" >
121- We have a deep experience developing niche extensions, including Adobe Illustrator and Chrome extensions, we are keen to expand our portfolio to other niche extensions.
158+ We have a deep experience developing niche extensions, including
159+ Adobe Illustrator and Chrome extensions, we are keen to expand
160+ our portfolio to other niche extensions.
122161 </p >
123162 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
124163 <li >Manifest V3 ready</li >
@@ -130,7 +169,8 @@ import LogoPattern from "../assets/logo-pattern.png";
130169 <div data-service-panel =" ai" class =" hidden" >
131170 <h3 class =" mb-3 text-2xl font-bold text-white" >AI & LLM Apps</h3 >
132171 <p class =" text-gray-300" >
133- Production-ready AI capabilities: retrieval, agents, evals, and observability integrated into your product.
172+ Production-ready AI capabilities: retrieval, agents, evals, and
173+ observability integrated into your product.
134174 </p >
135175 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
136176 <li >RAG pipelines and embeddings</li >
@@ -140,10 +180,13 @@ import LogoPattern from "../assets/logo-pattern.png";
140180 </div >
141181
142182 <div data-service-panel =" blockchain" class =" hidden" >
143- <h3 class =" mb-3 text-2xl font-bold text-white" >Blockchain & Smart Contracts</h3 >
183+ <h3 class =" mb-3 text-2xl font-bold text-white" >
184+ Blockchain & Smart Contracts
185+ </h3 >
144186 <p class =" text-gray-300" >
145- Practical on-chain solutions with off-chain services when needed. Security-minded reviews and
146- testable contracts with clean deployment workflows.
187+ Practical on-chain solutions with off-chain services when
188+ needed. Security-minded reviews and testable contracts with
189+ clean deployment workflows.
147190 </p >
148191 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
149192 <li >Contract design and audits</li >
@@ -153,10 +196,13 @@ import LogoPattern from "../assets/logo-pattern.png";
153196 </div >
154197
155198 <div data-service-panel =" legacy" class =" hidden" >
156- <h3 class =" mb-3 text-2xl font-bold text-white" >Legacy System Recovery</h3 >
199+ <h3 class =" mb-3 text-2xl font-bold text-white" >
200+ Legacy System Recovery
201+ </h3 >
157202 <p class =" text-gray-300" >
158- Stabilize, document, and incrementally modernize critical systems without halting business. We
159- reduce risk with small, measurable steps.
203+ Stabilize, document, and incrementally modernize critical
204+ systems without halting business. We reduce risk with small,
205+ measurable steps.
160206 </p >
161207 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
162208 <li >Readability and tests first</li >
@@ -166,10 +212,13 @@ import LogoPattern from "../assets/logo-pattern.png";
166212 </div >
167213
168214 <div data-service-panel =" cost" class =" hidden" >
169- <h3 class =" mb-3 text-2xl font-bold text-white" >Cost Optimization</h3 >
215+ <h3 class =" mb-3 text-2xl font-bold text-white" >
216+ Cost Optimization
217+ </h3 >
170218 <p class =" text-gray-300" >
171- Measure first, then optimize. We tune infrastructure and code paths to cut spend while keeping
172- reliability and user experience intact.
219+ Measure first, then optimize. We tune infrastructure and code
220+ paths to cut spend while keeping reliability and user experience
221+ intact.
173222 </p >
174223 <ul class =" mt-6 grid list-disc gap-2 pl-5 text-gray-300" >
175224 <li >Profiling and benchmarks</li >
@@ -182,7 +231,7 @@ import LogoPattern from "../assets/logo-pattern.png";
182231 </div >
183232 </div >
184233 </section >
185-
234+
186235 <!-- Testimonials -->
187236 <section id =" testimonials" class =" py-16" >
188237 <div class =" mx-auto max-w-7xl px-4 sm:px-6 lg:px-8" >
@@ -379,8 +428,6 @@ import LogoPattern from "../assets/logo-pattern.png";
379428 </section>
380429 -->
381430
382-
383-
384431 <!-- Custom scripts -->
385432 <script >
386433 document.addEventListener("DOMContentLoaded", () => {
@@ -404,31 +451,37 @@ import LogoPattern from "../assets/logo-pattern.png";
404451 });
405452
406453 // Tabs for services (no external deps)
407- const serviceButtons = document.querySelectorAll<HTMLButtonElement>('[data-service-button]');
408- const servicePanels = document.querySelectorAll<HTMLElement>('[data-service-panel]');
454+ const serviceButtons = document.querySelectorAll<HTMLButtonElement>(
455+ "[data-service-button]",
456+ );
457+ const servicePanels = document.querySelectorAll<HTMLElement>(
458+ "[data-service-panel]",
459+ );
409460 const activateService = (id: string) => {
410461 serviceButtons.forEach((btn) => {
411- const active = btn.getAttribute(' data-service-button' ) === id;
412- btn.setAttribute(' aria-selected' , active ? ' true' : ' false' );
413- btn.classList.toggle(' border-blue-500' , active);
414- btn.classList.toggle(' text-white' , active);
462+ const active = btn.getAttribute(" data-service-button" ) === id;
463+ btn.setAttribute(" aria-selected" , active ? " true" : " false" );
464+ btn.classList.toggle(" border-blue-500" , active);
465+ btn.classList.toggle(" text-white" , active);
415466 });
416467 servicePanels.forEach((panel) => {
417- const show = panel.getAttribute(' data-service-panel' ) === id;
418- panel.classList.toggle(' hidden' , !show);
468+ const show = panel.getAttribute(" data-service-panel" ) === id;
469+ panel.classList.toggle(" hidden" , !show);
419470 });
420471 };
421472 // Default selection
422- const firstBtn = document.querySelector<HTMLButtonElement>('[data-service-button]');
473+ const firstBtn = document.querySelector<HTMLButtonElement>(
474+ "[data-service-button]",
475+ );
423476 if (firstBtn) {
424- const id = firstBtn.getAttribute(' data-service-button' );
477+ const id = firstBtn.getAttribute(" data-service-button" );
425478 if (id) activateService(id);
426479 }
427480 serviceButtons.forEach((btn) =>
428- btn.addEventListener(' click' , () => {
429- const id = btn.getAttribute(' data-service-button' );
481+ btn.addEventListener(" click" , () => {
482+ const id = btn.getAttribute(" data-service-button" );
430483 if (id) activateService(id);
431- })
484+ }),
432485 );
433486
434487 // Load Swiper JS and initialize (for testimonials/blog only)
@@ -489,11 +542,13 @@ import LogoPattern from "../assets/logo-pattern.png";
489542
490543 toggles.forEach((toggle) => {
491544 toggle.addEventListener("click", () => {
492- const textElement = toggle.previousElementSibling as HTMLElement | null;
545+ const textElement =
546+ toggle.previousElementSibling as HTMLElement | null;
493547 if (!textElement) return;
494548 const isExpanded = toggle.getAttribute("data-expanded") === "true";
495549 const fullText = textElement.getAttribute("data-full-text") || "";
496- const truncatedText = textElement.getAttribute("data-truncated-text") || "";
550+ const truncatedText =
551+ textElement.getAttribute("data-truncated-text") || "";
497552
498553 if (isExpanded) {
499554 textElement.textContent = truncatedText;
0 commit comments