diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 348c45a..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,14 +0,0 @@ -import { dirname } from "path"; -import { fileURLToPath } from "url"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); - -const compat = new FlatCompat({ - baseDirectory: __dirname, -}); - -const eslintConfig = [...compat.extends("next/core-web-vitals")]; - -export default eslintConfig; diff --git a/next.config.mjs b/next.config.mjs index 62bfed7..c2b1600 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -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, diff --git a/package.json b/package.json index b82ba86..bb764de 100644 --- a/package.json +++ b/package.json @@ -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}\"" @@ -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", @@ -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", diff --git a/public/assets/images/case_studies/anatomyquest_work.webp b/public/assets/images/case_studies/anatomyquest_work.webp new file mode 100644 index 0000000..9f3e3ae Binary files /dev/null and b/public/assets/images/case_studies/anatomyquest_work.webp differ diff --git a/public/assets/images/case_studies/prepify_work.webp b/public/assets/images/case_studies/prepify_work.webp new file mode 100644 index 0000000..dc5d6e5 Binary files /dev/null and b/public/assets/images/case_studies/prepify_work.webp differ diff --git a/public/assets/images/case_studies/rematter_gallery01.webp b/public/assets/images/case_studies/rematter_gallery01.webp new file mode 100644 index 0000000..1437d26 Binary files /dev/null and b/public/assets/images/case_studies/rematter_gallery01.webp differ diff --git a/public/assets/images/case_studies/rematter_gallery02.webp b/public/assets/images/case_studies/rematter_gallery02.webp new file mode 100644 index 0000000..c2932b4 Binary files /dev/null and b/public/assets/images/case_studies/rematter_gallery02.webp differ diff --git a/public/assets/images/case_studies/rematter_gallery03.webp b/public/assets/images/case_studies/rematter_gallery03.webp new file mode 100644 index 0000000..634e470 Binary files /dev/null and b/public/assets/images/case_studies/rematter_gallery03.webp differ diff --git a/public/assets/images/case_studies/rematter_gallery04.webp b/public/assets/images/case_studies/rematter_gallery04.webp new file mode 100644 index 0000000..db27a4f Binary files /dev/null and b/public/assets/images/case_studies/rematter_gallery04.webp differ diff --git a/public/assets/images/case_studies/rematter_work.webp b/public/assets/images/case_studies/rematter_work.webp new file mode 100644 index 0000000..bc75c89 Binary files /dev/null and b/public/assets/images/case_studies/rematter_work.webp differ diff --git a/public/assets/images/case_studies/studentlife_work.webp b/public/assets/images/case_studies/studentlife_work.webp new file mode 100644 index 0000000..8190acc Binary files /dev/null and b/public/assets/images/case_studies/studentlife_work.webp differ diff --git a/public/assets/images/case_studies/victorias_work.webp b/public/assets/images/case_studies/victorias_work.webp index df8bb16..71c5ad6 100644 Binary files a/public/assets/images/case_studies/victorias_work.webp and b/public/assets/images/case_studies/victorias_work.webp differ diff --git a/public/assets/images/partner_01.webp b/public/assets/images/partner_01.webp index 14c87c5..ce52a62 100644 Binary files a/public/assets/images/partner_01.webp and b/public/assets/images/partner_01.webp differ diff --git a/public/assets/images/partner_02.webp b/public/assets/images/partner_02.webp index 625f4c6..fda1434 100644 Binary files a/public/assets/images/partner_02.webp and b/public/assets/images/partner_02.webp differ diff --git a/public/assets/images/partner_03.webp b/public/assets/images/partner_03.webp index 7af4215..159af8e 100644 Binary files a/public/assets/images/partner_03.webp and b/public/assets/images/partner_03.webp differ diff --git a/public/assets/images/partner_04.webp b/public/assets/images/partner_04.webp new file mode 100644 index 0000000..f3963e3 Binary files /dev/null and b/public/assets/images/partner_04.webp differ diff --git a/public/assets/images/partner_05.webp b/public/assets/images/partner_05.webp new file mode 100644 index 0000000..511062d Binary files /dev/null and b/public/assets/images/partner_05.webp differ diff --git a/public/assets/images/partner_06.webp b/public/assets/images/partner_06.webp new file mode 100644 index 0000000..ff6c8fd Binary files /dev/null and b/public/assets/images/partner_06.webp differ diff --git a/scripts/generate-partners.mjs b/scripts/generate-partners.mjs new file mode 100644 index 0000000..a83b08e --- /dev/null +++ b/scripts/generate-partners.mjs @@ -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(); + diff --git a/src/app/about/page.jsx b/src/app/about/page.jsx index cea502b..49c634a 100644 --- a/src/app/about/page.jsx +++ b/src/app/about/page.jsx @@ -16,7 +16,7 @@ const AboutUsHeader = () => { const items = []; const description = ( <> - At Camino Code, we specialize in delivering{" "} + We're a{" "} { scale: 1.05, }} > - Applied AI - {" "} - and{" "} - - Intelligent automation - {" "} - solutions. Our goal is to empower businesses with{" "} - - AI-powered + Technology & Product Development Studio - ,{" "} + . Rather than just building on request, we help early ideas get enough{" "} { scale: 1.05, }} > - Scalable - - , and{" "} + technical attention + {" "} + to be properly tested. We focus on feasibility, prototypes, and discovery so that the{" "} { scale: 1.05, }} > - Intelligent platforms + ideas that deserve to exist {" "} - that drive growth and efficiency. + can prove it. ); diff --git a/src/app/case-studies/page.jsx b/src/app/case-studies/page.jsx index fbd369b..c98978f 100644 --- a/src/app/case-studies/page.jsx +++ b/src/app/case-studies/page.jsx @@ -1,26 +1,34 @@ "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: () =>
, +}); +const Testimonials = dynamic(() => import("@/components/Testimonials"), { + ssr: false, + loading: () =>
, +}); + const CaseStudiesHeader = () => { const items = [ - { icon: , label: "50+ Projects Completed" }, - { icon: , label: "98% Client Satisfaction" }, - { icon: , label: "30+ Happy Clients" }, + { icon: , label: "Early-Stage Focus" }, + { icon: , label: "Prototypes & Discovery" }, + { icon: , 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,{" "} { scale: 1.05, }} > - High-quality - - ,{" "} - - Innovative AI solutions + I-Corps collaborations {" "} - in{" "} + and{" "} { scale: 1.05, }} > - Applied AI + proof-of-concepts {" "} - and{" "} + where{" "} { scale: 1.05, }} > - Intelligent Automation - - . Our portfolio showcases transformative projects that enhance business efficiency and performance. + technical execution + {" "} + made the difference before traditional funding. ); @@ -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} /> diff --git a/src/app/case-study/anatomy-quest/page.jsx b/src/app/case-study/anatomy-quest/page.jsx new file mode 100644 index 0000000..2d56c8a --- /dev/null +++ b/src/app/case-study/anatomy-quest/page.jsx @@ -0,0 +1,156 @@ +"use client"; + +import NavigationBar from "@/components/NavigationBar"; +import ContactForm from "@/components/ContactFormPages"; +import Footer from "@/components/Footer"; +import ClientProviders from "@/components/ClientProviders"; +import StructuredData from "@/components/StructuredData"; +import CaseStudyLayout from "@/components/common/CaseStudyLayout"; +import { BookOpen, Layers, Users, Share2 } from "lucide-react"; + +const AnatomyQuestCaseStudy = () => { + const caseData = { + client: "AnatomyQuest", + industry: "Education / EdTech", + duration: "Ongoing", + team: "Product & Community", + title: "AnatomyQuest", + subtitle: + "Free, interactive anatomy resource that helps you understand why each structure exists—so you remember it for life. Community-driven and open source.", + heroImage: "/assets/images/case_studies/anatomyquest_work.webp", + ctaLabel: "Visit AnatomyQuest", + ctaLink: "https://www.anatomyquest.org", + colorScheme: { + primary: "245, 158, 11", + gradient: "from-amber-400 to-red-600", + gradientReverse: "from-red-600 to-amber-400", + }, + stats: [ + { + value: "100+", + label: "Labeled landmarks", + icon: , + }, + { + value: "10+", + label: "Anatomical views", + icon: , + }, + { + value: "Free", + label: "Open source (CC BY-SA)", + icon: , + }, + { + value: "Community", + label: "Anyone can contribute", + icon: , + }, + ], + challenges: { + intro: + "Anatomy students often memorize structures without understanding context. Key challenges included:", + items: [ + "Making anatomy understandable, not just memorable", + "Providing interactive diagrams with hide/show labels", + "Structuring content (location, shape, neighbors, landmarks, blood supply)", + "Keeping the resource free and open for education", + ], + }, + challengeVisual: { + emoji: "🦴", + title: "Understand, Not Just Memorize", + description: + "An interactive anatomy resource built for long-term understanding.", + }, + solutions: { + intro: + "We focused on a five-step learning method, interactive diagrams, and a community-driven model so the resource can grow and stay up to date.", + items: [ + "Interactive diagrams with labeled landmarks and hover definitions", + "Structured learning steps: location, shape, neighbors, landmarks, blood supply", + "Multiple views and clear spatial context for each structure", + "Open source, CC BY-SA licensed, with contribution workflows", + ], + }, + solutionVisual: { + emoji: "📚", + title: "Education That Gives Back", + description: + "A free resource built with and for students and educators.", + }, + phases: [ + { + title: "Discovery & Content Design", + duration: "Ongoing", + description: + "Defining the learning model and diagram structure with educators and students.", + }, + { + title: "UX & Interactivity", + duration: "Iterative", + description: + "Designing interactive diagrams and navigation that support the five-step method.", + }, + { + title: "Implementation", + duration: "Continuous", + description: + "Building the site, diagram interactions, and contribution flows.", + }, + { + title: "Community & Content", + duration: "Continuous", + description: + "Onboarding contributors and expanding content coverage.", + }, + ], + images: [], + results: [ + "Interactive anatomy pages that support understanding, not just recall", + "A consistent five-step method applied across content", + "Free, open source resource available to all students", + "A community-driven model for ongoing improvement", + ], + prevCaseStudy: { + title: "ReMatter", + link: "/case-study/rematter-us", + }, + nextCaseStudy: { + title: "NJIT Student Life Connect", + link: "/case-study/student-life", + }, + }; + + return ( + + +
+
+ + + + +
+ + + +
+
+
+ ); +}; + +export default AnatomyQuestCaseStudy; diff --git a/src/app/case-study/healthtrack/page.jsx b/src/app/case-study/healthtrack/page.jsx index d5f39dd..4c7f918 100644 --- a/src/app/case-study/healthtrack/page.jsx +++ b/src/app/case-study/healthtrack/page.jsx @@ -121,12 +121,12 @@ const HealthTrackCaseStudy = () => { "100% HIPAA compliant with advanced security measures", ], prevCaseStudy: { - title: "Professional Portfolio for Daniel Avila", - link: "/case-study/daniel-avila", + title: "Transparent Energy", + link: "/case-study/transparent-energy", }, nextCaseStudy: { - title: "Professional Portfolio for Daniel Avila", - link: "/case-study/daniel-avila", + title: "Victoria's Painting", + link: "/case-study/victorias-painting", }, }; diff --git a/src/app/case-study/prepify/page.jsx b/src/app/case-study/prepify/page.jsx new file mode 100644 index 0000000..c51b12d --- /dev/null +++ b/src/app/case-study/prepify/page.jsx @@ -0,0 +1,156 @@ +"use client"; + +import NavigationBar from "@/components/NavigationBar"; +import ContactForm from "@/components/ContactFormPages"; +import Footer from "@/components/Footer"; +import ClientProviders from "@/components/ClientProviders"; +import StructuredData from "@/components/StructuredData"; +import CaseStudyLayout from "@/components/common/CaseStudyLayout"; +import { UtensilsCrossed, Truck, Leaf, Clock } from "lucide-react"; + +const PrepifyCaseStudy = () => { + const caseData = { + client: "Prepify", + industry: "Meal Prep / Food Tech", + duration: "Ongoing", + team: "Product & Engineering", + title: "Prepify", + subtitle: + "Fresh prepared meals near NJIT. Low-cost, convenient meal prep service with local pickup—nutritious options designed for students and busy professionals.", + heroImage: "/assets/images/case_studies/prepify_work.webp", + ctaLabel: "Visit Prepify", + ctaLink: "https://www.prepify.us", + colorScheme: { + primary: "245, 158, 11", + gradient: "from-amber-400 to-red-600", + gradientReverse: "from-red-600 to-amber-400", + }, + stats: [ + { + value: "Fresh", + label: "Freshly made daily, ready for pickup", + icon: , + }, + { + value: "Local", + label: "Pickup only near NJIT campus", + icon: , + }, + { + value: "Balanced", + label: "Meals designed for wellness", + icon: , + }, + { + value: "Simple", + label: "Order ahead, no hassle", + icon: , + }, + ], + challenges: { + intro: + "Students and busy professionals need convenient, affordable meals without sacrificing nutrition. Key challenges included:", + items: [ + "Offering low-cost options without compromising quality", + "Streamlining order and pickup flow for campus-area users", + "Providing balanced nutrition in prepared formats", + "Keeping operations contactless and efficient", + ], + }, + challengeVisual: { + emoji: "🥗", + title: "Convenience & Nutrition", + description: + "A meal prep service that fits campus life and busy schedules.", + }, + solutions: { + intro: + "We focused on a clear ordering experience, local pickup workflow, and a weekly menu that balances variety with operational simplicity.", + items: [ + "Simple menu and ordering flow for weekly selection", + "Local pickup–only model to keep costs down", + "Contactless pickup and clear communication", + "Freshly made daily options with balanced nutrition", + ], + }, + solutionVisual: { + emoji: "📦", + title: "Product & Operations", + description: + "A product designed for repeat orders and predictable pickup.", + }, + phases: [ + { + title: "Discovery & Scoping", + duration: "Ongoing", + description: + "Understanding user needs around campus, schedule, and nutrition preferences.", + }, + { + title: "UX & Order Flow", + duration: "Iterative", + description: + "Designing an intuitive menu and checkout experience for recurring use.", + }, + { + title: "Implementation", + duration: "Continuous", + description: + "Building and maintaining the site and order flow with a focus on reliability.", + }, + { + title: "Stabilization & Refinement", + duration: "Continuous", + description: + "Improving based on feedback and operational needs.", + }, + ], + images: [], + results: [ + "A clear, easy-to-use ordering experience for students and professionals", + "Local pickup–only model that supports low-cost, fresh meals", + "Weekly menu and contactless pickup aligned with campus life", + "A foundation to grow the offering and user base", + ], + prevCaseStudy: { + title: "NJIT Student Life Connect", + link: "/case-study/student-life", + }, + nextCaseStudy: { + title: "ReMatter", + link: "/case-study/rematter-us", + }, + }; + + return ( + + +
+
+ + + + +
+ + + +
+
+
+ ); +}; + +export default PrepifyCaseStudy; diff --git a/src/app/case-study/rematter-us/page.jsx b/src/app/case-study/rematter-us/page.jsx new file mode 100644 index 0000000..ed8bb27 --- /dev/null +++ b/src/app/case-study/rematter-us/page.jsx @@ -0,0 +1,162 @@ +"use client"; + +import NavigationBar from "@/components/NavigationBar"; +import ContactForm from "@/components/ContactFormPages"; +import Footer from "@/components/Footer"; +import ClientProviders from "@/components/ClientProviders"; +import StructuredData from "@/components/StructuredData"; +import CaseStudyLayout from "@/components/common/CaseStudyLayout"; +import { Truck, FileText, Scale, ShieldCheck } from "lucide-react"; + +const ReMatterCaseStudy = () => { + const caseData = { + client: "ReMatter", + industry: "Scrap Recycling Software", + duration: "Ongoing", + team: "Product Engineering", + title: "Website ReMatter", + subtitle: + "Transforming municipal waste into clean electricity and construction materials through intelligent AI-driven optimization.", + ctaLabel: "Visit ReMatter", + ctaLink: "https://www.rematter.us", + colorScheme: { + primary: "245, 158, 11", + gradient: "from-amber-400 to-red-600", + gradientReverse: "from-red-600 to-amber-400", + }, + stats: [ + { + value: "Docs", + label: "Faster purchase & sales paperwork", + icon: , + }, + { + value: "Dispatch", + label: "Bin tracking & routing workflows", + icon: , + }, + { + value: "Scale", + label: "Scale-ready operational flows", + icon: , + }, + { + value: "Secure", + label: "Compliance-minded engineering", + icon: , + }, + ], + challenges: { + intro: + "Scrap recyclers operate in high-volume environments where speed, accuracy, and reporting requirements matter. Key challenges included:", + items: [ + "Reducing manual steps in purchasing and sales documentation", + "Keeping dispatch and bin tracking reliable across daily operations", + "Making workflows intuitive for operators working quickly on-site", + "Supporting reporting needs without slowing down the business", + ], + }, + challengeVisual: { + emoji: "♻️", + title: "High-Volume Operations", + description: + "Operational software that keeps up with fast-moving, compliance-sensitive workflows.", + }, + solutions: { + intro: + "We focused on product engineering that improves operational throughput and usability while keeping the platform maintainable and scalable.", + items: [ + "Workflow-oriented UI patterns for operators and office staff", + "Document generation flows (purchase/sales documents, shipping paperwork)", + "Support for dispatch and bin tracking use-cases", + "Integration-friendly architecture for hardware and operational systems", + ], + }, + solutionVisual: { + emoji: "⚙️", + title: "Platform Engineering", + description: + "A centralized system designed to streamline day-to-day work across teams.", + }, + phases: [ + { + title: "Discovery & Scoping", + duration: "Ongoing", + description: + "Mapping operational workflows, identifying friction points, and prioritizing high-impact improvements.", + }, + { + title: "UX & Workflow Design", + duration: "Iterative", + description: + "Designing fast, operator-friendly flows that reduce clicks and increase clarity in high-pressure environments.", + }, + { + title: "Implementation", + duration: "Continuous", + description: + "Shipping improvements with a focus on reliability, maintainability, and performance.", + }, + { + title: "Stabilization & Refinement", + duration: "Continuous", + description: + "Monitoring feedback, tightening edge cases, and improving the overall user experience.", + }, + ], + images: [ + "/assets/images/case_studies/rematter_gallery01.webp", + "/assets/images/case_studies/rematter_gallery02.webp", + "/assets/images/case_studies/rematter_gallery03.webp", + "/assets/images/case_studies/rematter_gallery04.webp", + ], + results: [ + "Streamlined operational workflows for buying and selling transactions", + "Improved usability for teams working across the yard and the office", + "A foundation designed to support integrations and reporting needs", + "A consistent platform experience that scales with growth", + ], + prevCaseStudy: { + title: "Prepify", + link: "/case-study/prepify", + }, + nextCaseStudy: { + title: "AnatomyQuest", + link: "/case-study/anatomy-quest", + }, + }; + + return ( + + +
+ {/* Tailwind safelist helpers for CaseStudyLayout's dynamic color classes */} +
+ + + + +
+ + + +
+
+
+ ); +}; + +export default ReMatterCaseStudy; + diff --git a/src/app/case-study/student-life/page.jsx b/src/app/case-study/student-life/page.jsx new file mode 100644 index 0000000..75e29bc --- /dev/null +++ b/src/app/case-study/student-life/page.jsx @@ -0,0 +1,154 @@ +"use client"; + +import NavigationBar from "@/components/NavigationBar"; +import ContactForm from "@/components/ContactFormPages"; +import Footer from "@/components/Footer"; +import ClientProviders from "@/components/ClientProviders"; +import StructuredData from "@/components/StructuredData"; +import CaseStudyLayout from "@/components/common/CaseStudyLayout"; +import { Users, Calendar, GraduationCap, Building2 } from "lucide-react"; + +const StudentLifeCaseStudy = () => { + const caseData = { + client: "NJIT Student Life", + industry: "Higher Ed / Campus Platform", + duration: "Ongoing", + team: "Product & Engineering", + title: "NJIT Student Life Connect", + subtitle: + "One-stop platform for everything NJIT: find friends, join clubs, stay updated on athletics, events, and campus resources.", + heroImage: "/assets/images/case_studies/studentlife_work.webp", + colorScheme: { + primary: "245, 158, 11", + gradient: "from-amber-400 to-red-600", + gradientReverse: "from-red-600 to-amber-400", + }, + stats: [ + { + value: "Social", + label: "Find friends & clubs", + icon: , + }, + { + value: "Events", + label: "Campus events & athletics", + icon: , + }, + { + value: "Academics", + label: "Office hours, research, resources", + icon: , + }, + { + value: "Campus", + label: "Building hours, volunteer, feedback", + icon: , + }, + ], + challenges: { + intro: + "Students need a single place to connect with campus life—clubs, events, athletics, and resources. Key challenges included:", + items: [ + "Unifying social, academic, and campus info in one experience", + "Helping students find clubs and friends by interests", + "Surfacing events, games, and building hours clearly", + "Supporting career opportunities and feedback channels", + ], + }, + challengeVisual: { + emoji: "🏫", + title: "Build Your NJIT Community", + description: + "A platform that connects Highlanders to everything campus has to offer.", + }, + solutions: { + intro: + "We focused on a modular, easy-to-navigate experience with personalized club recommendations and clear access to events and resources.", + items: [ + "Find a Friend and club discovery based on interests", + "Today's events, athletics, and intramurals in one view", + "Academic resources: office hours, research, study support", + "Campus resources: building hours, volunteer, feedback", + ], + }, + solutionVisual: { + emoji: "🔗", + title: "One-Stop Campus Hub", + description: + "A centralized place for social, academic, and campus life.", + }, + phases: [ + { + title: "Discovery & Scoping", + duration: "Ongoing", + description: + "Mapping student and campus needs across social, academic, and administrative use cases.", + }, + { + title: "UX & Information Architecture", + duration: "Iterative", + description: + "Designing navigation and flows that make many resource types easy to find and use.", + }, + { + title: "Implementation", + duration: "Continuous", + description: + "Building the platform with a focus on reliability and maintainability.", + }, + { + title: "Stabilization & Growth", + duration: "Continuous", + description: + "Iterating on feedback and expanding features and content.", + }, + ], + images: [], + results: [ + "A single platform for NJIT social, events, athletics, and resources", + "Personalized club and friend discovery for students", + "Clear access to events, building hours, and academic support", + "A foundation to grow with campus needs", + ], + prevCaseStudy: { + title: "AnatomyQuest", + link: "/case-study/anatomy-quest", + }, + nextCaseStudy: { + title: "Prepify", + link: "/case-study/prepify", + }, + }; + + return ( + + +
+
+ + + + +
+ + + +
+
+
+ ); +}; + +export default StudentLifeCaseStudy; diff --git a/src/app/case-study/transparent-energy/page.jsx b/src/app/case-study/transparent-energy/page.jsx index 745209f..3b2f31f 100644 --- a/src/app/case-study/transparent-energy/page.jsx +++ b/src/app/case-study/transparent-energy/page.jsx @@ -124,8 +124,8 @@ const TransparentEnergyCaseStudy = () => { "Enhanced data transparency and decision-making speed" ], prevCaseStudy: { - title: "Daniel Avila Portfolio", - link: "/case-study/daniel-avila" + title: "ReMatter", + link: "/case-study/rematter-us" }, nextCaseStudy: { title: "Victoria's Painting", diff --git a/src/app/case-study/victorias-painting/page.jsx b/src/app/case-study/victorias-painting/page.jsx index bee2941..1b0cc96 100644 --- a/src/app/case-study/victorias-painting/page.jsx +++ b/src/app/case-study/victorias-painting/page.jsx @@ -128,8 +128,8 @@ const VictoriasPaintingCaseStudy = () => { "Increased customer inquiries and bookings through website", ], nextCaseStudy: { - title: "Daniel Avila Portfolio", - link: "/case-study/daniel-avila", + title: "ReMatter", + link: "/case-study/rematter-us", }, prevCaseStudy: { title: "Transparent Energy", diff --git a/src/app/contact/page.jsx b/src/app/contact/page.jsx index 6538a03..c738ec6 100644 --- a/src/app/contact/page.jsx +++ b/src/app/contact/page.jsx @@ -18,8 +18,7 @@ const ContactUsHeader = () => { const description = ( <> - We'd love to hear from you! Whether you have questions about our services - or want to discuss your next big project, our team is ready to help{" "} + Have an idea you want to test? Tell us about it. We're here to see if we can help you get it far enough to be{" "} { scale: 1.05, }} > - transform your ideas into reality + properly evaluated . diff --git a/src/app/page.js b/src/app/page.js index 742856b..74abbd8 100644 --- a/src/app/page.js +++ b/src/app/page.js @@ -37,7 +37,7 @@ const Hero = () => { const items = []; const description = ( <> - At Camino Code, we build{" "} + We're a{" "} { scale: 1.05, }} > - AI-powered platforms - {" "} - and use them to deliver{" "} - - Applied AI services + Technology & Product Development Studio - . Our clients benefit from{" "} + . We direct time, engineering, and infrastructure toward early-stage ideas through{" "} { scale: 1.05, }} > - proprietary technology - {" "} - that's{" "} - - continuously improving - {" "} - through real-world application. We're not reselling tools—we're{" "} + technical execution + + . So they can be{" "} { scale: 1.05, }} > - creating them + properly tested and evaluated - . + {" "}before they need to scale. ); @@ -97,7 +77,7 @@ const Hero = () => { titleWords={["CODE", "THE FUTURE"]} description={description} items={items} - ctaLabel="Get Started" + ctaLabel="Tell Us Your Idea" ctaLink="/contact" gradientWordIndex={0} /> diff --git a/src/app/services/page.jsx b/src/app/services/page.jsx index d1a54f4..0c49917 100644 --- a/src/app/services/page.jsx +++ b/src/app/services/page.jsx @@ -21,7 +21,7 @@ const ServicesHeader = () => { const description = ( <> - Empowering businesses with{" "} + We collaborate on{" "} { scale: 1.05, }} > - Advanced AI + technical feasibility ,{" "} { scale: 1.05, }} > - Data intelligence + proof-of-concept builds {" "} and{" "} { scale: 1.05, }} > - Product engineering + product discovery - . We transform your vision into reality with cutting-edge solutions that scale. + . So your idea gets far enough to be meaningfully evaluated. ); @@ -61,7 +61,7 @@ const ServicesHeader = () => { titleWords={["OUR", "SERVICES"]} description={description} items={items} - ctaLabel="Explore Our Services" + ctaLabel="How We Can Help" ctaLink="#services-list" gradientWordIndex={1} /> diff --git a/src/app/sitemap.js b/src/app/sitemap.js index 78365f1..21baa04 100644 --- a/src/app/sitemap.js +++ b/src/app/sitemap.js @@ -43,7 +43,7 @@ export default function sitemap() { priority: 0.7, }, { - url: `${baseUrl}/case-study/daniel-avila`, + url: `${baseUrl}/case-study/rematter-us`, lastModified: currentDate, changeFrequency: 'monthly', priority: 0.7, diff --git a/src/components/AboutUsHero.jsx b/src/components/AboutUsHero.jsx index 815fb62..87a3dab 100644 --- a/src/components/AboutUsHero.jsx +++ b/src/components/AboutUsHero.jsx @@ -76,27 +76,27 @@ export default function AboutMissionVision() { { title: "Mission", icon: "🎯", - description: "At Camino Code, our mission is to deliver innovative Applied AI and intelligent automation solutions that empower businesses to thrive in a fast-paced digital world. We combine technical expertise with AI innovation to develop scalable, intelligent, and high-performing systems." + description: "Our mission is to lower the barrier for early-stage ideas. We direct time, engineering, and infrastructure so that concepts get enough technical attention to be properly tested. We focus on feasibility, prototypes, and product discovery so ideas can be meaningfully evaluated before they need to scale." }, { title: "Vision", icon: "🔭", - description: "Our vision is to become a global leader in Applied AI and intelligent automation by setting new standards for innovation, performance, and customer satisfaction. We envision a future where businesses of all sizes have access to intelligent, scalable, and efficient AI-powered solutions." + description: "We envision Camino Code as a place where early ideas can be explored seriously enough to determine whether they deserve to exist. Not consulting on request: a platform for experimentation and early product development, where technical execution helps ideas move from concept to reality." } ]; const valueCards = [ { emoji: "🚀", - title: "Innovation First" + title: "Technical Execution" }, { - emoji: "🔒", - title: "Secure Systems" + emoji: "🔬", + title: "Feasibility & Discovery" }, { emoji: "📈", - title: "Scalable Growth" + title: "Evaluate Then Scale" } ]; diff --git a/src/components/AboutUsOffers.jsx b/src/components/AboutUsOffers.jsx index 055e5cd..8dac438 100644 --- a/src/components/AboutUsOffers.jsx +++ b/src/components/AboutUsOffers.jsx @@ -360,7 +360,7 @@ export default function WhatSetsUsApart() { } transition={{ duration: isMobile ? 0.6 : 1, delay: 0.8 }} > - At Camino Code, we combine{" "} + We give early ideas the{" "} - Applied AI + technical attention {" "} - and{" "} - - Intelligent automation - {" "} - to create innovative, AI-powered solutions that drive business - transformation. + they need so they can be properly tested and evaluated before they scale. {/* Button */} setMounted(true), []); + return ( <> - + {mounted && } {children} diff --git a/src/components/Work.jsx b/src/components/Work.jsx index 1b78c43..d31f5bb 100644 --- a/src/components/Work.jsx +++ b/src/components/Work.jsx @@ -24,30 +24,43 @@ const staggerContainer = { const caseStudies = [ { id: 1, - title: "Data Automation for Transparent Energy", + title: "Prepify", description: - "Automated reconciliation system saving $65,000+ annually in analyst time.", - image: "/assets/images/case_studies/transparent_work.webp", - href: "/case-study/transparent-energy", - color: "from-blue-400 to-purple-600", + "Fresh prepared meals near NJIT. Low-cost, convenient meal prep service with local pickup—nutritious options designed for students and busy professionals.", + image: "/assets/images/case_studies/prepify_work.webp", + href: "/case-study/prepify", + color: "from-emerald-500 to-teal-600", + clientLabel: "Prepify", }, { id: 2, - title: "Website Victoria's Painting", + title: "Website ReMatter", description: - "Built a professional website that helps homeowners find trusted painting services and connects them with experts.", - image: "/assets/images/case_studies/victorias_work.webp", - href: "/case-study/victorias-painting", - color: "from-blue-400 to-blue-600", + "Transforming municipal waste into clean electricity and construction materials through intelligent AI-driven optimization.", + image: "/assets/images/case_studies/rematter_work.webp", + href: "/case-study/rematter-us", + color: "from-amber-400 to-red-600", + clientLabel: "ReMatter", }, { id: 3, - title: "Portfolio Daniel Avila", + title: "AnatomyQuest", description: - "How we built a clean, modern, and user-focused portfolio website that reflects expertise, clarity, and trust.", - image: "/assets/images/case_studies/danielavila_work.webp", - href: "/case-study/daniel-avila", - color: "from-blue-700 to-blue-400", + "Free, interactive anatomy resource that helps you understand why each structure exists—so you remember it for life. Community-driven and open source.", + image: "/assets/images/case_studies/anatomyquest_work.webp", + href: "/case-study/anatomy-quest", + color: "from-blue-400 to-indigo-600", + clientLabel: "AnatomyQuest", + }, + { + id: 4, + title: "NJIT Student Life Connect", + description: + "One-stop platform for everything NJIT: find friends, join clubs, stay updated on athletics, events, and campus resources.", + image: "/assets/images/case_studies/studentlife_work.webp", + href: "/case-study/student-life", + color: "from-rose-500 to-red-600", + clientLabel: "Student Life", }, ]; @@ -87,100 +100,93 @@ const CaseStudyCard = ({ study, index }) => { initial="hidden" whileInView="visible" viewport={{ once: true, margin: "-100px" }} - className="group relative overflow-hidden rounded-3xl bg-gradient-to-br from-white/10 to-white/5 backdrop-blur-sm transition-all duration-500" + className="group relative" onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} - whileHover={!isMobile ? { - scale: 1.02, - transition: { duration: 0.3 } - } : {}} style={{ transform: !isMobile && isHovered - ? `perspective(1000px) rotateX(${position.y * 8}deg) rotateY(${ - position.x * 8 - }deg)` + ? `perspective(1000px) rotateX(${position.y * 4}deg) rotateY(${position.x * 4}deg)` : "perspective(1000px) rotateX(0deg) rotateY(0deg)", transformStyle: "preserve-3d", - transition: "transform 0.15s ease-out", + transition: "transform 0.25s ease-out", }} > - {/* Card glow effect */} - -
- {/* Image Section */} -
- {study.title} -
- - {/* Content Section - Below Image */} -
- - {study.title} - - - - {study.description} - - + transition={{ duration: 0.3, ease: [0.25, 0.46, 0.45, 0.94] }} + > + {/* Image */} +
+ {study.image ? ( + <> - - View Case Study - - - - - - + {study.title} + +
+ + ) : ( +
+ + {study.clientLabel ?? "Case Study"} + +
+ )} +
+ + {/* Content */} +
+ + + {study.title} + +

+ {study.description} +

+ + View Case Study + + + + +
-
+ ); @@ -332,7 +338,7 @@ export default function WorkShowcase() { animate={hasIntersected ? { opacity: 1, y: 0, filter: "none" } : {}} transition={{ duration: isMobile ? 0.5 : 0.8, delay: 0.3 }} > - We take pride in delivering{" "} + Ideas we've helped take from concept to testable reality. Early-stage work,{" "} - innovative AI solutions + proof-of-concepts {" "} - that drive measurable success. Our portfolio showcases transformative projects in Applied AI, intelligent automation, and data engineering. + and collaborations where technical execution made the difference before traditional funding. - {/* Mobile Models removed */} - - {/* Case Studies Grid with enhanced stagger animation */} + {/* Case Studies Grid: 4 filas en móvil, 2×2 en pantallas grandes */} - + { ); }; -const ImplementationSection = ({ phases, images, colorScheme, isMobile }) => { +const ImplementationSection = ({ + phases, + images, + colorScheme, + isMobile, + galleryAspectClass, + galleryGridClassName, + galleryItemOverflowClassName, + galleryHoverScale, + galleryContentHoverScale, + galleryFrameClassName, + galleryImageShadowClassName, + galleryImageClassName, + galleryImageContainerClassName, + galleryItemClassName, +}) => { const { ref, hasIntersected } = useIntersectionObserver({ threshold: 0.3 }); const [hoveredIndex, setHoveredIndex] = useState(null); const [hoveredImage, setHoveredImage] = useState(null); @@ -639,33 +674,60 @@ const ImplementationSection = ({ phases, images, colorScheme, isMobile }) => { -
+
{images.slice(0, 4).map((image, index) => ( setHoveredImage(index)} onHoverEnd={() => setHoveredImage(null)} - whileHover={!isMobile ? { scale: 1.02 } : {}} + whileHover={ + !isMobile + ? { scale: galleryHoverScale, transition: { duration: 0.18, ease: "easeOut" } } + : {} + } > - +
+ {(galleryImageShadowClassName || galleryImageContainerClassName) ? ( +
+ {galleryImageShadowClassName ? ( + + ) : ( + + )} +
))} diff --git a/src/components/common/OptimizedImage.jsx b/src/components/common/OptimizedImage.jsx index aedfd96..41fe31d 100644 --- a/src/components/common/OptimizedImage.jsx +++ b/src/components/common/OptimizedImage.jsx @@ -13,7 +13,7 @@ export default function OptimizedImage({ quality = 85, priority = false, className = "", - containerClassName = "", + containerClassName = "w-full h-full", showOverlay = false, onLoad, }) { @@ -25,7 +25,7 @@ export default function OptimizedImage({ }; return ( -
+
{/* Skeleton Loader */} {isLoading && } diff --git a/src/config/partners.generated.json b/src/config/partners.generated.json new file mode 100644 index 0000000..ac2ca0d --- /dev/null +++ b/src/config/partners.generated.json @@ -0,0 +1,26 @@ +[ + { + "src": "/assets/images/partner_01.webp", + "alt": "Partner 01" + }, + { + "src": "/assets/images/partner_02.webp", + "alt": "Partner 02" + }, + { + "src": "/assets/images/partner_03.webp", + "alt": "Partner 03" + }, + { + "src": "/assets/images/partner_04.webp", + "alt": "Partner 04" + }, + { + "src": "/assets/images/partner_05.webp", + "alt": "Partner 05" + }, + { + "src": "/assets/images/partner_06.webp", + "alt": "Partner 06" + } +]