Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions eslint.config.mjs

This file was deleted.

5 changes: 5 additions & 0 deletions next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
const nextConfig = {
distDir: "build",

// Disable ESLint during builds (run separately in development/CI)
eslint: {
ignoreDuringBuilds: true,
},

// Performance optimizations
compress: true,
poweredByHeader: false,
Expand Down
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"dev": "node scripts/generate-partners.mjs && next dev",
"build": "node scripts/generate-partners.mjs && next build",
"start": "next start",
"lint": "next lint",
"format": "prettier --write \"src/**/*.{js,ts,jsx,tsx,html}\""
Expand All @@ -17,7 +17,7 @@
"@vercel/analytics": "^1.5.0",
"framer-motion": "^12.23.0",
"lucide-react": "^0.525.0",
"next": "14.2.3",
"next": "14.2.35",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-hook-form": "^7.60.0",
Expand All @@ -28,8 +28,8 @@
"@types/node": "24.0.10",
"@types/react": "19.1.8",
"autoprefixer": "^10.4.17",
"eslint": "^9.30.1",
"eslint-config-next": "^15.3.5",
"eslint": "8.57.0",
"eslint-config-next": "14.2.35",
"postcss": "^8.4.35",
"prettier": "^3.5.3",
"prettier-plugin-tailwindcss": "^0.6.11",
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/assets/images/case_studies/victorias_work.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/assets/images/partner_01.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/assets/images/partner_02.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/assets/images/partner_03.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/images/partner_04.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/images/partner_05.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/images/partner_06.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 49 additions & 0 deletions scripts/generate-partners.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import fs from "node:fs";
import path from "node:path";

const repoRoot = process.cwd();
const imagesDir = path.join(repoRoot, "public", "assets", "images");
const overridesPath = path.join(repoRoot, "src", "config", "partners.overrides.json");
const outPath = path.join(repoRoot, "src", "config", "partners.generated.json");

function readOverrides() {
try {
const raw = fs.readFileSync(overridesPath, "utf8");
return JSON.parse(raw);
} catch {
return {};
}
}

function main() {
if (!fs.existsSync(imagesDir)) {
console.error(`[generate-partners] Missing directory: ${imagesDir}`);
process.exit(1);
}

const overrides = readOverrides();
const files = fs
.readdirSync(imagesDir)
.filter((f) => /^partner_(\d+)\.(webp|png|jpe?g|svg)$/i.test(f))
.map((file) => {
const match = file.match(/^partner_(\d+)\./i);
const num = match ? Number(match[1]) : Number.POSITIVE_INFINITY;
return { file, num };
})
.sort((a, b) => a.num - b.num);

const partners = files.map(({ file, num }) => {
const numLabel = Number.isFinite(num) ? String(num).padStart(2, "0") : "";
return {
src: `/assets/images/${file}`,
alt: overrides[file] ?? (numLabel ? `Partner ${numLabel}` : "Partner"),
};
});

fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, JSON.stringify(partners, null, 2) + "\n", "utf8");
console.log(`[generate-partners] Wrote ${partners.length} partners -> ${path.relative(repoRoot, outPath)}`);
}

main();

36 changes: 8 additions & 28 deletions src/app/about/page.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,57 +16,37 @@ const AboutUsHeader = () => {
const items = [];
const description = (
<>
At Camino Code, we specialize in delivering{" "}
We're a{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Applied AI
</motion.span>{" "}
and{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Intelligent automation
</motion.span>{" "}
solutions. Our goal is to empower businesses with{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
AI-powered
Technology & Product Development Studio
</motion.span>
,{" "}
. Rather than just building on request, we help early ideas get enough{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Scalable
</motion.span>
, and{" "}
technical attention
</motion.span>{" "}
to be properly tested. We focus on feasibility, prototypes, and discovery so that the{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Intelligent platforms
ideas that deserve to exist
</motion.span>{" "}
that drive growth and efficiency.
can prove it.
</>
);

Expand Down
46 changes: 22 additions & 24 deletions src/app/case-studies/page.jsx
Original file line number Diff line number Diff line change
@@ -1,66 +1,64 @@
"use client";

import dynamic from "next/dynamic";
import { motion } from "framer-motion";
import NavigationBar from "@/components/NavigationBar";
import ContactForm from "@/components/ContactFormPages";
import PageHeader from "@/components/common/Headers";
import { Briefcase, Award, Users } from "lucide-react";
import Work from "@/components/Work";
import Testimonials from "@/components/Testimonials";
import Footer from "@/components/Footer";
import ClientProviders from "@/components/ClientProviders";
import StructuredData from "@/components/StructuredData";

const Work = dynamic(() => import("@/components/Work"), {
ssr: false,
loading: () => <div className="min-h-[400px]" aria-hidden />,
});
const Testimonials = dynamic(() => import("@/components/Testimonials"), {
ssr: false,
loading: () => <div className="min-h-[300px]" aria-hidden />,
});

const CaseStudiesHeader = () => {
const items = [
{ icon: <Briefcase className="h-8 w-8" />, label: "50+ Projects Completed" },
{ icon: <Award className="h-8 w-8" />, label: "98% Client Satisfaction" },
{ icon: <Users className="h-8 w-8" />, label: "30+ Happy Clients" },
{ icon: <Briefcase className="h-8 w-8" />, label: "Early-Stage Focus" },
{ icon: <Award className="h-8 w-8" />, label: "Prototypes & Discovery" },
{ icon: <Users className="h-8 w-8" />, label: "Ideas in the Pipeline" },
];

const description = (
<>
At Camino Code, we take pride in delivering{" "}
Ideas we've helped take from concept to testable reality. Early-stage work,{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
High-quality
</motion.span>
,{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Innovative AI solutions
I-Corps collaborations
</motion.span>{" "}
in{" "}
and{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Applied AI
proof-of-concepts
</motion.span>{" "}
and{" "}
where{" "}
<motion.span
className="font-semibold text-amber-400 whitespace-nowrap"
whileHover={{
textShadow: "0 0 20px rgba(245, 158, 11, 0.8)",
scale: 1.05,
}}
>
Intelligent Automation
</motion.span>
. Our portfolio showcases transformative projects that enhance business efficiency and performance.
technical execution
</motion.span>{" "}
made the difference before traditional funding.
</>
);

Expand All @@ -70,7 +68,7 @@ const CaseStudiesHeader = () => {
titleWords={["CASE", "STUDIES"]}
description={description}
items={items}
ctaLabel="Explore Our Work"
ctaLabel="See the Work"
ctaLink="#work"
gradientWordIndex={0}
/>
Expand Down
Loading