JSON-LD Improvements
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/push/deploy Pipeline was successful

This commit is contained in:
2026-03-12 00:24:28 -03:00
parent d7e427f164
commit cf6ff70cfb
14 changed files with 369 additions and 243 deletions

View File

@@ -1,6 +1,10 @@
<script lang="ts"> <script lang="ts">
import { page } from '$app/state';
import type { FaqList } from '$lib/types/faq'; import type { FaqList } from '$lib/types/faq';
const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}${page.url?.pathname ?? '/'}`;
const { const {
faqList, faqList,
title = 'FAQ', title = 'FAQ',
@@ -8,6 +12,32 @@
faqList: FaqList; faqList: FaqList;
title?: string; title?: string;
} = $props(); } = $props();
const faqPageJsonLd = $derived(
JSON.stringify({
'@context': 'https://schema.org',
'@type': 'FAQPage',
'@id': `${PAGE_URL}#faq`,
mainEntity: faqList.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
}),
);
const jsonLdHtml = $derived(
faqPageJsonLd
? '<scr' +
'ipt type="application/ld+json">' +
faqPageJsonLd +
'</scr' +
'ipt>'
: '',
);
</script> </script>
<section id="faq" class="section faq" aria-labelledby="faq-heading"> <section id="faq" class="section faq" aria-labelledby="faq-heading">
@@ -20,6 +50,10 @@
{/each} {/each}
</dl> </dl>
</div> </div>
{#if jsonLdHtml}
<!-- eslint-disable-next-line svelte/no-at-html-tags -- static trusted JSON-LD -->
{@html jsonLdHtml}
{/if}
</section> </section>
<style> <style>

View File

@@ -1,9 +1,11 @@
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from './json-ld'; import { baseJsonLdGraph, catalogJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { homepageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
export const homeMeta: PageMeta = { export const homeMeta: PageMeta = {
title: 'mifi Ventures — Hands-On Product Architecture for Early-Stage SaaS | Boston, MA', title: 'mifi Ventures — Hands-On Product Architecture for Early-Stage SaaS | Boston, MA',
description: description:
'Product architecture and senior software engineering for early-stage SaaS teams. Mike Fitzpatrick works inside your codebase to build foundations that ship fast without structural debt—frontend systems, MVP launch, fractional CTO, and stage-aligned infrastructure.', 'Product architecture and senior software engineering for early-stage SaaS teams. Mike Fitzpatrick works inside your codebase to build foundations that ship fast without structural debt—frontend systems, MVP launch, fractional CTO, and stage-aligned infrastructure.',
jsonLd: defaultJsonLdGraph, canonical: 'https://mifi.ventures',
jsonLd: [...baseJsonLdGraph, homepageJsonLdGraph, ...catalogJsonLdGraph],
}; };

View File

@@ -1,20 +1,30 @@
import { BASE, PHONE, WORDMARK } from './constants';
/** /**
* Default JSON-LD graph nodes (Organization, Person, WebSite, WebPage, OfferCatalog). * Default JSON-LD graph nodes (Organization, Person, WebSite, WebPage,
* ProfessionalService, OfferCatalog).
*
* Used for the home page; other pages can add or override via meta.jsonLd. * Used for the home page; other pages can add or override via meta.jsonLd.
*/ */
const BASE = 'https://mifi.ventures'; export const baseJsonLdGraph: Record<string, unknown>[] = [
export const defaultJsonLdGraph: Record<string, unknown>[] = [
{ {
'@type': 'Organization', '@type': 'Organization',
'@id': `${BASE}/#organization`, '@id': `${BASE}/#organization`,
name: 'mifi Ventures, LLC', name: 'mifi Ventures, LLC',
legalName: 'mifi Ventures, LLC', legalName: 'mifi Ventures, LLC',
url: `${BASE}/`, url: `${BASE}/`,
logo: { '@type': 'ImageObject', url: `${BASE}/favicon.svg` }, logo: {
'@type': 'ImageObject',
url: WORDMARK,
},
image: {
'@type': 'ImageObject',
url: WORDMARK,
},
telephone: PHONE,
description: description:
'Hands-on product architecture for early-stage SaaS: frontend systems, MVP launch support, fractional CTO guidance, and stage-aligned infrastructure strategy.', 'Hands-on product architecture for early-stage SaaS teams: SaaS product architecture, MVP architecture and launch support, fractional CTO guidance, and stage-aligned infrastructure strategy.',
founder: { '@id': `${BASE}/#principal` }, founder: { '@id': `${BASE}/#principal` },
address: { address: {
'@type': 'PostalAddress', '@type': 'PostalAddress',
@@ -22,10 +32,18 @@ export const defaultJsonLdGraph: Record<string, unknown>[] = [
addressRegion: 'MA', addressRegion: 'MA',
addressCountry: 'US', addressCountry: 'US',
}, },
geo: { '@type': 'GeoCoordinates', latitude: 42.360082, longitude: -71.05888 },
areaServed: { '@type': 'Country', name: 'United States' }, areaServed: { '@type': 'Country', name: 'United States' },
hasOfferCatalog: { '@id': `${BASE}/#services` }, hasOfferCatalog: { '@id': `${BASE}/#services` },
sameAs: ['https://www.linkedin.com/in/the-mifi', 'https://github.com/the-mifi'], sameAs: ['https://www.linkedin.com/in/the-mifi', 'https://github.com/the-mifi'],
contactPoint: [
{
'@type': 'ContactPoint',
contactType: 'sales',
telephone: PHONE,
areaServed: 'US',
availableLanguage: ['en'],
},
],
}, },
{ {
'@type': 'Person', '@type': 'Person',
@@ -33,24 +51,27 @@ export const defaultJsonLdGraph: Record<string, unknown>[] = [
name: 'Mike Fitzpatrick', name: 'Mike Fitzpatrick',
jobTitle: 'Product Architect and Senior Software Engineer', jobTitle: 'Product Architect and Senior Software Engineer',
description: description:
'Hands-on technical partner for early-stage SaaS teams; works inside codebases to build foundations that ship fast without structural debt.', 'Hands-on technical partner for early-stage SaaS teams; works inside codebases to build strong product foundations that ship fast without structural debt.',
url: `${BASE}/`, url: `${BASE}/`,
worksFor: { '@id': `${BASE}/#organization` }, worksFor: { '@id': `${BASE}/#organization` },
knowsAbout: [ knowsAbout: [
'Product Architecture',
'Frontend Architecture', 'Frontend Architecture',
'UI Architecture', 'UI Architecture',
'React Development', 'React Development',
'Web Performance Optimization',
'Core Web Vitals',
'Technical SEO',
'Web Accessibility (WCAG)',
'Component Libraries',
'Design Systems',
'JavaScript', 'JavaScript',
'TypeScript', 'TypeScript',
'Modern Web Development', 'Component Libraries',
'Design Systems',
'Design Tokens',
'CSS Architecture',
'Web Accessibility (WCAG)',
'Technical SEO',
'Core Web Vitals',
'MVP Architecture',
'Greenfield Product Development', 'Greenfield Product Development',
'Legacy System Modernization', 'Fractional CTO',
'Startup Infrastructure Strategy',
'Code Refactoring', 'Code Refactoring',
], ],
sameAs: ['https://www.linkedin.com/in/the-mifi', 'https://github.com/the-mifi'], sameAs: ['https://www.linkedin.com/in/the-mifi', 'https://github.com/the-mifi'],
@@ -60,8 +81,12 @@ export const defaultJsonLdGraph: Record<string, unknown>[] = [
'@id': `${BASE}/#website`, '@id': `${BASE}/#website`,
url: `${BASE}/`, url: `${BASE}/`,
name: 'mifi Ventures', name: 'mifi Ventures',
description: 'Hands-on product architecture for early-stage SaaS — Boston, MA', description: 'Hands-on product architecture for early-stage SaaS teams.',
publisher: { '@id': `${BASE}/#organization` }, publisher: { '@id': `${BASE}/#organization` },
image: {
'@type': 'ImageObject',
url: WORDMARK,
},
potentialAction: { potentialAction: {
'@type': 'ReserveAction', '@type': 'ReserveAction',
target: { target: {
@@ -71,94 +96,86 @@ export const defaultJsonLdGraph: Record<string, unknown>[] = [
name: 'Schedule a 30-minute intro call', name: 'Schedule a 30-minute intro call',
}, },
}, },
{ ];
'@type': 'WebPage',
'@id': `${BASE}/#webpage`, export const catalogJsonLdGraph: Record<string, unknown>[] = [
url: `${BASE}/`,
name: 'mifi Ventures — Hands-On Product Architecture for Early-Stage SaaS | Boston, MA',
description:
'Product architecture and senior software engineering for early-stage SaaS. Ship fast without structural debt—frontend systems, MVP launch, fractional CTO, stage-aligned infrastructure.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
mainEntity: { '@id': `${BASE}/#organization` },
primaryImageOfPage: { '@type': 'ImageObject', url: `${BASE}/favicon.svg` },
inLanguage: 'en-US',
},
{ {
'@type': 'ProfessionalService', '@type': 'ProfessionalService',
'@id': `${BASE}/#professional-service`, '@id': `${BASE}/#professional-service`,
name: 'mifi Ventures', name: 'mifi Ventures',
url: `${BASE}/`, url: `${BASE}/`,
image: {
'@type': 'ImageObject',
url: WORDMARK,
},
logo: {
'@type': 'ImageObject',
url: WORDMARK,
},
telephone: PHONE,
description: description:
'Hands-on product architecture for early-stage SaaS teams: product architecture, MVP launch support, fractional CTO, and stage-aligned infrastructure.', 'Hands-on product architecture and senior software engineering for early-stage SaaS teams: SaaS product architecture, MVP architecture and launch, fractional CTO guidance, and stage-aligned infrastructure.',
serviceType: [ serviceType: [
'Product Architecture', 'SaaS Product Architecture',
'SaaS Engineering Consulting', 'MVP Architecture and Launch Consulting',
'Fractional CTO Services', 'Fractional CTO Services',
'Startup Infrastructure Strategy', 'Startup Infrastructure Strategy',
], ],
provider: { '@id': `${BASE}/#organization` }, provider: { '@id': `${BASE}/#organization` },
address: {
'@type': 'PostalAddress',
addressLocality: 'Boston',
addressRegion: 'MA',
addressCountry: 'US',
},
areaServed: { '@type': 'Country', name: 'United States' }, areaServed: { '@type': 'Country', name: 'United States' },
}, },
{ {
'@type': 'OfferCatalog', '@type': 'OfferCatalog',
'@id': `${BASE}/#services`, '@id': `${BASE}/#services`,
name: 'Software Engineering Consulting Services', name: 'SaaS Architecture Services',
description: 'Consulting services offered by mifi Ventures', description:
numberOfItems: 6, 'Consulting services offered by mifi Ventures for early-stage SaaS teams.',
numberOfItems: 4,
itemListElement: [ itemListElement: [
{ {
'@type': 'Offer', '@type': 'Offer',
url: `${BASE}/hands-on-saas-architecture-consultant`,
itemOffered: { itemOffered: {
'@type': 'Service', '@type': 'Service',
name: 'Frontend and UI Architecture', name: 'Hands-On SaaS Architecture',
description: description:
'Product-focused frontend and UI architecture for modern web applications, with an emphasis on clarity, scalability, and long-term maintainability.', 'Hands-on product architecture for early-stage SaaS teams, focused on frontend systems, reusable components, design tokens, accessibility, and scalable foundations for fast iteration.',
}, },
}, },
{ {
'@type': 'Offer', '@type': 'Offer',
url: `${BASE}/mvp-architecture-and-launch`,
itemOffered: { itemOffered: {
'@type': 'Service', '@type': 'Service',
name: 'Greenfield Product Development', name: 'MVP Architecture & Launch',
description: description:
'Greenfield product builds and early-stage foundations, getting new projects off the ground quickly with structures designed to grow, not be rewritten.', 'Architecture and implementation support for early-stage SaaS MVPs that need to ship quickly without creating structural debt, fragile CSS, or difficult-to-extend product foundations.',
}, },
}, },
{ {
'@type': 'Offer', '@type': 'Offer',
url: `${BASE}/fractional-cto-for-early-stage-saas`,
itemOffered: { itemOffered: {
'@type': 'Service', '@type': 'Service',
name: 'Performance Optimization', name: 'Fractional CTO / Technical Partner',
description: description:
'Performance, Core Web Vitals, rendering strategy, and technical SEO optimization focused on real-world user journeys.', 'Part-time technical leadership for early-stage SaaS teams that need architectural guidance, tradeoff evaluation, and hands-on technical oversight without hiring a full-time CTO.',
}, },
}, },
{ {
'@type': 'Offer', '@type': 'Offer',
url: `${BASE}/stage-aligned-infrastructure`,
itemOffered: { itemOffered: {
'@type': 'Service', '@type': 'Service',
name: 'Accessibility Engineering', name: 'Stage-Aligned Infrastructure',
description: description:
'Accessibility-first engineering, ensuring WCAG-compliant interfaces with semantic markup, keyboard parity, and inclusive interaction patterns.', 'Infrastructure strategy for early-stage SaaS teams that aligns cloud, SaaS, and deployment decisions with company stage, reducing unnecessary complexity and preserving runway.',
},
},
{
'@type': 'Offer',
itemOffered: {
'@type': 'Service',
name: 'System Modernization',
description:
'Modernization and stabilization of existing systems, including refactors, framework upgrades, and untangling overgrown frontend codebases.',
},
},
{
'@type': 'Offer',
itemOffered: {
'@type': 'Service',
name: 'End-to-End Feature Delivery',
description:
'End-to-end feature delivery with clear ownership and documentation, spanning frontend and supporting backend work without unnecessary complexity.',
}, },
}, },
], ],

View File

@@ -0,0 +1,3 @@
export const BASE = 'https://mifi.ventures';
export const WORDMARK = `${BASE}/assets/wordmark.svg`;
export const PHONE = '+1-888-991-6434';

View File

@@ -0,0 +1,68 @@
import { BASE } from './constants';
export const handsOnSaaSArchitectureConsultantServiceJsonLdGraph: Record<
string,
unknown
> = {
'@type': 'Service',
'@id': `${BASE}/hands-on-saas-architecture-consultant#service`,
name: 'Hands-On SaaS Architecture',
url: `${BASE}/hands-on-saas-architecture-consultant`,
description:
'Hands-on product architecture for early-stage SaaS teams, focused on frontend systems, reusable components, design tokens, accessibility, and scalable foundations for fast iteration.',
serviceType: 'SaaS Product Architecture',
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
audience: {
'@type': 'Audience',
audienceType: 'Early-stage SaaS founders and engineering teams',
},
};
export const mvpArchitectureAndLaunchServiceJsonLdGraph: Record<string, unknown> = {
'@type': 'Service',
'@id': `${BASE}/mvp-architecture-and-launch#service`,
name: 'MVP Architecture & Launch',
url: `${BASE}/mvp-architecture-and-launch`,
description:
'Architecture and implementation support for early-stage SaaS MVPs that need to ship quickly without structural debt, fragile CSS, or difficult-to-extend product foundations.',
serviceType: 'MVP Architecture and Launch Consulting',
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
audience: {
'@type': 'Audience',
audienceType: 'Founder-led SaaS startups and early product teams',
},
};
export const fractionalCtoForEarlyStageSaaSServiceJsonLdGraph: Record<string, unknown> = {
'@type': 'Service',
'@id': `${BASE}/fractional-cto-for-early-stage-saas#service`,
name: 'Fractional CTO / Technical Partner',
url: `${BASE}/fractional-cto-for-early-stage-saas`,
description:
'Part-time technical leadership for early-stage SaaS teams that need architectural guidance, tradeoff evaluation, and hands-on technical oversight without hiring a full-time CTO.',
serviceType: 'Fractional CTO Services',
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
audience: {
'@type': 'Audience',
audienceType: 'Early-stage SaaS founders and growing engineering teams',
},
};
export const stageAlignedInfrastructureServiceJsonLdGraph: Record<string, unknown> = {
'@type': 'Service',
'@id': `${BASE}/stage-aligned-infrastructure#service`,
name: 'Stage-Aligned Infrastructure',
url: `${BASE}/stage-aligned-infrastructure`,
description:
'Infrastructure strategy for early-stage SaaS teams that aligns cloud, SaaS, and deployment decisions with company stage, reducing unnecessary complexity and preserving runway.',
serviceType: 'Startup Infrastructure Strategy',
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
audience: {
'@type': 'Audience',
audienceType: 'Early-stage SaaS founders and small engineering teams',
},
};

View File

@@ -0,0 +1,130 @@
import { BASE, WORDMARK } from './constants';
export const homepageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/#webpage`,
url: `${BASE}/`,
name: 'mifi Ventures | Hands-On Product Architecture for Early-Stage SaaS',
description:
'Hands-on product architecture for early-stage SaaS teams—SaaS architecture, MVP launch support, fractional CTO guidance, and stage-aligned infrastructure strategy.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
mainEntity: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const servicesPageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/services#webpage`,
url: `${BASE}/services`,
name: 'SaaS Architecture Services | mifi Ventures',
description:
'Hands-on SaaS architecture consulting for early-stage teams. Services include product architecture, MVP launch support, fractional CTO guidance, and stage-aligned infrastructure strategy.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const handsOnSaaSArchitectureConsultantPageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/hands-on-saas-architecture-consultant#webpage`,
url: `${BASE}/hands-on-saas-architecture-consultant`,
name: 'SaaS Product Architecture Consultant | mifi Ventures',
description:
'Hands-on product architecture for early-stage SaaS teams. Build frontend foundations that scale with reusable components, design tokens, accessibility, and clean architecture.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const mvpArchitectureAndLaunchPageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/mvp-architecture-and-launch#webpage`,
url: `${BASE}/mvp-architecture-and-launch`,
name: 'MVP Architecture & Launch Consultant | mifi Ventures',
description:
'Architecture and implementation support for early-stage SaaS MVPs that need to ship quickly without structural debt, fragile CSS, or difficult-to-extend product foundations.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const fractionalCtoForEarlyStageSaaSPageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/fractional-cto-for-early-stage-saas#webpage`,
url: `${BASE}/fractional-cto-for-early-stage-saas`,
name: 'Fractional CTO for Early-Stage SaaS | mifi Ventures',
description:
'Hands-on technical leadership for early-stage SaaS teams that need architectural guidance, technical tradeoff evaluation, and senior oversight without hiring a full-time CTO.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const stageAlignedInfrastructurePageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/stage-aligned-infrastructure#webpage`,
url: `${BASE}/stage-aligned-infrastructure`,
name: 'Stage-Aligned Infrastructure for Startups | mifi Ventures',
description:
'Infrastructure strategy for early-stage SaaS teams that aligns cloud, SaaS, and deployment decisions with company stage, reducing unnecessary complexity and preserving runway.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const privacyPolicyPageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/privacy-policy#webpage`,
url: `${BASE}/privacy-policy`,
name: 'Privacy Policy | mifi Ventures',
description:
'Read the mifi Ventures privacy policy, including how personal information is collected, used, stored, and protected.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};
export const termsOfServicePageJsonLdGraph: Record<string, unknown> = {
'@type': 'WebPage',
'@id': `${BASE}/terms-of-service#webpage`,
url: `${BASE}/terms-of-service`,
name: 'Terms of Service | mifi Ventures',
description:
'Read the mifi Ventures terms of service, including the terms governing use of the site and consulting services.',
isPartOf: { '@id': `${BASE}/#website` },
about: { '@id': `${BASE}/#organization` },
primaryImageOfPage: {
'@type': 'ImageObject',
url: WORDMARK,
},
inLanguage: 'en-US',
};

View File

@@ -20,9 +20,10 @@
}) })
: '', : '',
); );
const jsonLdHtml = $derived( const jsonLdHtml = $derived(
jsonLdScript jsonLdScript
? '<script type="application/ld+json">' + jsonLdScript + '</scr' + 'ipt>' ? '<scr' + 'ipt type="application/ld+json">' + jsonLdScript + '</scr' + 'ipt>'
: '', : '',
); );
</script> </script>

View File

@@ -1,5 +1,7 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { privacyPolicyPageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PATH = '/privacy-policy'; const PATH = '/privacy-policy';
@@ -10,17 +12,7 @@ const privacyPageMeta: PageMeta = {
description: description:
'Privacy Policy for mifi Ventures LLC. Describes information we collect, how we use it, messaging policy (SMS), data security, and your rights. Last updated March 5, 2026.', 'Privacy Policy for mifi Ventures LLC. Describes information we collect, how we use it, messaging policy (SMS), data security, and your rights. Last updated March 5, 2026.',
canonical: PAGE_URL, canonical: PAGE_URL,
jsonLd: [ jsonLd: [...baseJsonLdGraph, privacyPolicyPageJsonLdGraph],
{
'@type': 'WebPage',
'@id': `${PAGE_URL}#webpage`,
name: 'Privacy Policy | mifi Ventures',
url: PAGE_URL,
dateModified: '2026-03-05',
publisher: { '@id': `${BASE}/#organization` },
inLanguage: 'en-US',
},
],
}; };
export const load: PageLoad = () => { export const load: PageLoad = () => {

View File

@@ -1,34 +1,21 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from '$lib/data/home/json-ld'; import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { pageContent } from '$lib/data/services/landing/content'; import { pageContent } from '$lib/data/services/landing/content';
import { servicesPageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
import { catalogJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}/services/`; const PATH = '/services';
const PAGE_URL = `${BASE}${PATH}`;
export const load: PageLoad = () => { export const load: PageLoad = () => {
const { meta } = pageContent; const { meta } = pageContent;
const servicePageMeta: PageMeta = { const servicePageMeta: PageMeta = {
title: meta.title, title: meta.title,
description: meta.description, description: meta.description,
jsonLd: [ canonical: PAGE_URL,
...defaultJsonLdGraph, jsonLd: [...baseJsonLdGraph, ...catalogJsonLdGraph, servicesPageJsonLdGraph],
{
'@type': 'ProfessionalService',
'@id': `${BASE}/services/#service`,
name: 'mifi Ventures',
url: PAGE_URL,
description: meta.jsonLdServiceDescription ?? meta.description,
serviceType: [
'SaaS Architecture Consulting',
'MVP Development Consulting',
'Fractional CTO Services',
'Startup Infrastructure Strategy',
],
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
},
],
}; };
return { meta: servicePageMeta }; return { meta: servicePageMeta };
}; };

View File

@@ -1,49 +1,24 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from '$lib/data/home/json-ld'; import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { pageContent } from '$lib/data/services/fractional-cto-for-early-stage-saas/content'; import { pageContent } from '$lib/data/services/fractional-cto-for-early-stage-saas/content';
import { faqItems } from '$lib/data/services/fractional-cto-for-early-stage-saas/faq'; import { fractionalCtoForEarlyStageSaaSServiceJsonLdGraph } from '$lib/data/json-ld/servicesJsonLdGraphs';
import { fractionalCtoForEarlyStageSaaSPageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}/services/fractional-cto-for-early-stage-saas/`; const PATH = '/services/fractional-cto-for-early-stage-saas';
const PAGE_URL = `${BASE}${PATH}`;
function buildFaqPageJsonLd(): Record<string, unknown> {
return {
'@type': 'FAQPage',
'@id': `${PAGE_URL}#faq`,
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
}
export const load: PageLoad = () => { export const load: PageLoad = () => {
const { meta } = pageContent; const { meta } = pageContent;
const servicePageMeta: PageMeta = { const servicePageMeta: PageMeta = {
title: meta.title, title: meta.title,
description: meta.description, description: meta.description,
canonical: PAGE_URL,
jsonLd: [ jsonLd: [
...defaultJsonLdGraph, ...baseJsonLdGraph,
{ fractionalCtoForEarlyStageSaaSPageJsonLdGraph,
'@type': 'ProfessionalService', fractionalCtoForEarlyStageSaaSServiceJsonLdGraph,
'@id': `${BASE}/services/fractional-cto-for-early-stage-saas/#service`,
name: 'mifi Ventures',
url: PAGE_URL,
description: meta.jsonLdServiceDescription ?? meta.description,
serviceType: [
'Fractional CTO',
'Technical Leadership',
'SaaS Engineering Consulting',
],
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
},
buildFaqPageJsonLd(),
], ],
}; };
return { meta: servicePageMeta }; return { meta: servicePageMeta };

View File

@@ -1,49 +1,24 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from '$lib/data/home/json-ld';
import { pageContent } from '$lib/data/services/hands-on-saas-architecture-consultant/content'; import { pageContent } from '$lib/data/services/hands-on-saas-architecture-consultant/content';
import { faqItems } from '$lib/data/services/hands-on-saas-architecture-consultant/faq'; import { handsOnSaaSArchitectureConsultantPageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
import { handsOnSaaSArchitectureConsultantServiceJsonLdGraph } from '$lib/data/json-ld/servicesJsonLdGraphs';
import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}/services/hands-on-saas-architecture-consultant/`; const PATH = '/services/hands-on-saas-architecture-consultant';
const PAGE_URL = `${BASE}${PATH}`;
function buildFaqPageJsonLd(): Record<string, unknown> {
return {
'@type': 'FAQPage',
'@id': `${PAGE_URL}#faq`,
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
}
export const load: PageLoad = () => { export const load: PageLoad = () => {
const { meta } = pageContent; const { meta } = pageContent;
const servicePageMeta: PageMeta = { const servicePageMeta: PageMeta = {
title: meta.title, title: meta.title,
description: meta.description, description: meta.description,
canonical: PAGE_URL,
jsonLd: [ jsonLd: [
...defaultJsonLdGraph, ...baseJsonLdGraph,
{ handsOnSaaSArchitectureConsultantPageJsonLdGraph,
'@type': 'ProfessionalService', handsOnSaaSArchitectureConsultantServiceJsonLdGraph,
'@id': `${BASE}/services/hands-on-saas-architecture-consultant/#service`,
name: 'mifi Ventures',
url: PAGE_URL,
description: meta.jsonLdServiceDescription ?? meta.description,
serviceType: [
'Product Architecture',
'SaaS Engineering Consulting',
'Frontend Systems Architecture',
],
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
},
buildFaqPageJsonLd(),
], ],
}; };
return { meta: servicePageMeta }; return { meta: servicePageMeta };

View File

@@ -1,49 +1,24 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from '$lib/data/home/json-ld'; import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { pageContent } from '$lib/data/services/mvp-architecture-and-launch/content'; import { pageContent } from '$lib/data/services/mvp-architecture-and-launch/content';
import { faqItems } from '$lib/data/services/mvp-architecture-and-launch/faq'; import { mvpArchitectureAndLaunchServiceJsonLdGraph } from '$lib/data/json-ld/servicesJsonLdGraphs';
import { mvpArchitectureAndLaunchPageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}/services/mvp-architecture-and-launch/`; const PATH = '/services/mvp-architecture-and-launch';
const PAGE_URL = `${BASE}${PATH}`;
function buildFaqPageJsonLd(): Record<string, unknown> {
return {
'@type': 'FAQPage',
'@id': `${PAGE_URL}#faq`,
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
}
export const load: PageLoad = () => { export const load: PageLoad = () => {
const { meta } = pageContent; const { meta } = pageContent;
const servicePageMeta: PageMeta = { const servicePageMeta: PageMeta = {
title: meta.title, title: meta.title,
description: meta.description, description: meta.description,
canonical: PAGE_URL,
jsonLd: [ jsonLd: [
...defaultJsonLdGraph, ...baseJsonLdGraph,
{ mvpArchitectureAndLaunchPageJsonLdGraph,
'@type': 'ProfessionalService', mvpArchitectureAndLaunchServiceJsonLdGraph,
'@id': `${BASE}/services/mvp-architecture-and-launch/#service`,
name: 'mifi Ventures',
url: PAGE_URL,
description: meta.jsonLdServiceDescription ?? meta.description,
serviceType: [
'MVP Architecture',
'SaaS Engineering Consulting',
'Product Architecture',
],
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
},
buildFaqPageJsonLd(),
], ],
}; };
return { meta: servicePageMeta }; return { meta: servicePageMeta };

View File

@@ -1,49 +1,24 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { defaultJsonLdGraph } from '$lib/data/home/json-ld'; import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
import { pageContent } from '$lib/data/services/stage-aligned-infrastructure/content'; import { pageContent } from '$lib/data/services/stage-aligned-infrastructure/content';
import { faqItems } from '$lib/data/services/stage-aligned-infrastructure/faq'; import { stageAlignedInfrastructureServiceJsonLdGraph } from '$lib/data/json-ld/servicesJsonLdGraphs';
import { stageAlignedInfrastructurePageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PAGE_URL = `${BASE}/services/stage-aligned-infrastructure/`; const PATH = '/services/stage-aligned-infrastructure';
const PAGE_URL = `${BASE}${PATH}`;
function buildFaqPageJsonLd(): Record<string, unknown> {
return {
'@type': 'FAQPage',
'@id': `${PAGE_URL}#faq`,
mainEntity: faqItems.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
}
export const load: PageLoad = () => { export const load: PageLoad = () => {
const { meta } = pageContent; const { meta } = pageContent;
const servicePageMeta: PageMeta = { const servicePageMeta: PageMeta = {
title: meta.title, title: meta.title,
description: meta.description, description: meta.description,
canonical: PAGE_URL,
jsonLd: [ jsonLd: [
...defaultJsonLdGraph, ...baseJsonLdGraph,
{ stageAlignedInfrastructurePageJsonLdGraph,
'@type': 'ProfessionalService', stageAlignedInfrastructureServiceJsonLdGraph,
'@id': `${BASE}/services/stage-aligned-infrastructure/#service`,
name: 'mifi Ventures',
url: PAGE_URL,
description: meta.jsonLdServiceDescription ?? meta.description,
serviceType: [
'SaaS Architecture Consulting',
'Startup Infrastructure Strategy',
'Technical Leadership Consulting',
],
provider: { '@id': `${BASE}/#organization` },
areaServed: { '@type': 'Country', name: 'United States' },
},
buildFaqPageJsonLd(),
], ],
}; };
return { meta: servicePageMeta }; return { meta: servicePageMeta };

View File

@@ -1,5 +1,7 @@
import type { PageLoad } from './$types'; import type { PageLoad } from './$types';
import type { PageMeta } from '$lib/seo'; import type { PageMeta } from '$lib/seo';
import { termsOfServicePageJsonLdGraph } from '$lib/data/json-ld/webpageJsonLdGraphs';
import { baseJsonLdGraph } from '$lib/data/json-ld/baseJsonLdGraphs';
const BASE = 'https://mifi.ventures'; const BASE = 'https://mifi.ventures';
const PATH = '/terms-of-service'; const PATH = '/terms-of-service';
@@ -10,17 +12,7 @@ const termsPageMeta: PageMeta = {
description: description:
'Terms of Service for mifi Ventures LLC. Covers use of the website, services, client communications including SMS, acceptable use, and contact information.', 'Terms of Service for mifi Ventures LLC. Covers use of the website, services, client communications including SMS, acceptable use, and contact information.',
canonical: PAGE_URL, canonical: PAGE_URL,
jsonLd: [ jsonLd: [...baseJsonLdGraph, termsOfServicePageJsonLdGraph],
{
'@type': 'WebPage',
'@id': `${PAGE_URL}#webpage`,
name: 'Terms of Service | mifi Ventures',
url: PAGE_URL,
dateModified: '2026-03-05',
publisher: { '@id': `${BASE}/#organization` },
inLanguage: 'en-US',
},
],
}; };
export const load: PageLoad = () => { export const load: PageLoad = () => {