Technology β€’

This is a test site

S

Sarah Johnson

Head of Product

This is a test site

Test site please

OfficeIQ - Marketing Website

A high-performance, SEO-optimized marketing website built with Astro.js. Designed for scalability with a page-based component architecture and integrated with PagesCMS for easy content management.


🎯 Project Overview

This is the official OfficeIQ marketing website featuring:

  • Homepage with hero, features, pricing, and testimonials
  • Blog with content collections and PagesCMS integration
  • SEO-optimized with structured data and meta tags
  • Performance-first with compression, prefetch, and optimized assets
  • Scalable architecture ready for multiple landing pages

πŸ“ Folder Structure

The project uses a page-based component organization for easy navigation and scalability:

officeiq-astrojs/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ home/                    # Homepage-specific components
β”‚   β”‚   β”‚   β”œβ”€β”€ sections/            # Hero, FAQ, Comparison, etc.
β”‚   β”‚   β”‚   β”œβ”€β”€ features/            # FeaturesTabs, InteractiveDemo
β”‚   β”‚   β”‚   └── pricing/             # PricingCalculator
β”‚   β”‚   β”œβ”€β”€ shared/                  # Cross-page components
β”‚   β”‚   β”‚   β”œβ”€β”€ layout/              # Header, Footer
β”‚   β”‚   β”‚   β”œβ”€β”€ blog/                # Blog components
β”‚   β”‚   β”‚   └── seo/                 # SEO, FAQStructuredData
β”‚   β”‚   └── modules/                 # Future: Module landing pages
β”‚   β”‚
β”‚   β”œβ”€β”€ pages/                       # Routes (URL structure)
β”‚   β”‚   β”œβ”€β”€ index.astro              # Homepage (/)
β”‚   β”‚   └── blog/
β”‚   β”‚       β”œβ”€β”€ index.astro          # Blog listing (/blog)
β”‚   β”‚       └── [slug].astro         # Blog posts (/blog/post-name)
β”‚   β”‚
β”‚   β”œβ”€β”€ content/                     # Content Collections (Markdown)
β”‚   β”‚   β”œβ”€β”€ blog/                    # Blog posts (.md files)
β”‚   β”‚   └── config.ts                # Content schema
β”‚   β”‚
β”‚   β”œβ”€β”€ layouts/                     # Page layouts
β”‚   β”‚   └── BaseLayout.astro         # Base HTML structure
β”‚   β”‚
β”‚   β”œβ”€β”€ data/                        # Static data & utilities
β”‚   β”‚   └── authors.ts               # Author information
β”‚   β”‚
β”‚   β”œβ”€β”€ assets/images/               # Optimized images (developer-managed)
β”‚   └── styles/global.css            # Global styles
β”‚
β”œβ”€β”€ public/                          # Static assets (served as-is)
β”‚   β”œβ”€β”€ images/blog/                 # Blog images (CMS-uploaded)
β”‚   β”œβ”€β”€ favicon.svg
β”‚   └── robots.txt
β”‚
β”œβ”€β”€ docs/                            # Documentation
β”‚   β”œβ”€β”€ SEO-SETUP.md
β”‚   └── PERFORMANCE-INTEGRATIONS.md
β”‚
β”œβ”€β”€ reference/                       # Design files & prototypes
β”‚   β”œβ”€β”€ component-*.html
β”‚   └── sample-dashboard/
β”‚
β”œβ”€β”€ astro.config.mjs                 # Astro configuration
β”œβ”€β”€ tailwind.config.mjs              # Tailwind CSS config
β”œβ”€β”€ pagescms.config.yml              # PagesCMS configuration
└── package.json

Why This Structure?

  • Page-based organization - Components grouped by which page uses them
  • Easy to scale - Add new landing pages without cluttering existing code
  • Clear separation - Pages (routes) vs Components (building blocks)
  • Team-friendly - Different developers can work on different pages

πŸš€ Astro Integrations

Core Integrations

IntegrationPurposeImpact
@astrojs/cloudflareSSR adapter for Cloudflare PagesEnables server-side rendering
@astrojs/sitemapAuto-generates sitemap.xmlBetter SEO, helps search engines crawl
astro-compressMinifies HTML, CSS, JS, images30-50% smaller bundle size
@astrojs/partytownMoves analytics to web workersFaster page loads, better performance
Built-in PrefetchPreloads pages on hoverInstant-feeling navigation

Performance Features

  • Image Optimization - Automatic WebP conversion, responsive sizes (via astro:assets)
  • Lazy Loading - Images load only when needed
  • Code Splitting - Only load what’s needed per page
  • Asset Compression - All assets minified in production

πŸ” SEO Implementation

What We Built

  1. SEO Component (src/components/shared/seo/SEO.astro)

    • Meta title and description
    • Open Graph tags (Facebook, LinkedIn)
    • Twitter Card tags
    • Canonical URLs
    • Structured data (JSON-LD)
  2. Smart Fallbacks

    • If no SEO title β†’ uses page title
    • If no OG image β†’ uses featured image
    • If no meta description β†’ uses excerpt
  3. Blog Post SEO

    • Custom SEO title/description per post
    • Featured images for social sharing
    • Author information
    • Category and tags
    • Structured data for articles
  4. Technical SEO

    • Sitemap.xml (auto-generated)
    • robots.txt
    • Semantic HTML
    • Fast page loads (Core Web Vitals)
    • Mobile-responsive

SEO Checklist for Each Page

  • βœ… Unique title (50-60 characters)
  • βœ… Meta description (150-160 characters)
  • βœ… Featured image (1200x630px for social)
  • βœ… Semantic HTML structure
  • βœ… Fast loading time
  • βœ… Mobile-friendly

πŸ“ Content Management with PagesCMS

For Content Writers

PagesCMS provides a user-friendly interface to manage blog posts without touching code.

How to Add a Blog Post

  1. Access PagesCMS

    • Connect to your GitHub repository
    • Navigate to β€œBlog Posts” collection
  2. Create New Post

    • Click β€œNew Blog Post”
    • Fill in the required fields (see below)
  3. Required Fields

FieldDescriptionExample
TitleMain headline (50-60 chars)β€œ10 Office Management Tips for 2024”
ExcerptShort summary (120-160 chars)β€œLearn how to streamline your office operations…”
DatePublish date2024-01-15
AuthorSelect from dropdownJohn Doe
Featured ImageUpload or paste URL (1200x630px)Upload from computer
CategorySelect categoryTechnology
  1. Optional SEO Fields (for better Google ranking)
FieldWhen to UseExample
SEO TitleDifferent title for Google”Office Management: 10 Expert Tips”
SEO DescriptionCustom search description”Discover proven strategies…”
TagsKeywords for filteringastro, seo, performance
  1. Optional Social Media Fields (for custom social previews)
FieldWhen to Use
OG TitleCustom title for social shares
OG DescriptionCustom description for social
OG ImageDifferent image for social media
  1. Write Content

    • Use the markdown editor
    • Add images by uploading (they go to public/images/blog/)
    • Format with markdown (headings, lists, links, etc.)
  2. Preview & Publish

    • Preview your post
    • Click β€œSave” to commit to GitHub
    • Changes deploy automatically

Image Best Practices

  • Featured images: 1200x630px, <200KB

  • Inline images: Optimize before upload (<200KB each)

  • Alt text: Always add descriptive alt text for SEO

    ![Office management dashboard showing task tracking](/images/blog/dashboard.jpg)

SEO Tips for Writers

  1. Title: Include main keyword, keep under 60 characters
  2. Excerpt: Compelling summary with keyword, 120-160 characters
  3. Headings: Use H2, H3 for structure (## Heading, ### Subheading)
  4. Images: Descriptive filenames and alt text
  5. Links: Link to related posts and external resources
  6. Length: Aim for 800+ words for better SEO

�️ Development

Getting Started

# Install dependencies
npm install

# Run development server
npm run dev
# Visit http://localhost:4321

# Build for production
npm run build

# Preview production build
npm run preview

Adding a New Landing Page

  1. Create page file

    src/pages/products.astro
  2. Create components

    src/components/products/
    β”œβ”€β”€ ProductsHero.astro
    β”œβ”€β”€ ProductsFeatures.astro
    └── ProductsPricing.astro
  3. Use in page

    ---
    import BaseLayout from '../layouts/BaseLayout.astro';
    import ProductsHero from '../components/products/ProductsHero.astro';
    ---
    
    <BaseLayout title="Products - Office IQ">
      <ProductsHero />
    </BaseLayout>

πŸš€ Deployment

  1. Push to GitHub
  2. Connect to Cloudflare Pages
  3. Configure:
    • Build command: npm run build
    • Build output: dist
    • Node version: 18+

Alternative: Vercel, Netlify

Both support Astro SSR out of the box. Just connect your GitHub repo.


οΏ½ Performance Metrics

Current Performance

  • Lighthouse Score: 95+ (all categories)
  • Page Load: <1s (optimized)
  • Bundle Size: ~250KB (compressed)
  • Core Web Vitals: All green

Optimizations Applied

  • βœ… Image optimization (WebP, responsive)
  • βœ… Code minification
  • βœ… Asset compression
  • βœ… Prefetch on hover
  • βœ… Lazy loading
  • βœ… Optimized third-party scripts

πŸ“š Documentation


🎯 Next Steps

Immediate

  • Update site URL in astro.config.mjs
  • Connect PagesCMS to GitHub
  • Deploy to production

Future Enhancements

  • Add module landing pages (Documents, Vendors, etc.)
  • Implement newsletter signup
  • Add customer testimonials
  • Create case studies section

🀝 Team

Built for: OfficeIQ
Tech Stack: Astro.js, Tailwind CSS, PagesCMS
Hosting: Cloudflare Pages (SSR mode)


Questions? Check the docs folder or reach out to the development team.

S

Sarah Johnson

Head of Product

"Sarah leads product development at OfficeIQ with a focus on user experience and scalability. With a background in enterprise software, she brings deep expertise in building tools that teams actually want to use."