home / skills / jeremylongshore / claude-code-plugins-plus-skills / ideogram-reference-architecture

This skill helps design Ideogram integrations by enforcing a reference architecture, project structure, and best-practice patterns across layers.

npx playbooks add skill jeremylongshore/claude-code-plugins-plus-skills --skill ideogram-reference-architecture

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.0 KB
---
name: ideogram-reference-architecture
description: |
  Implement Ideogram reference architecture with best-practice project layout.
  Use when designing new Ideogram integrations, reviewing project structure,
  or establishing architecture standards for Ideogram applications.
  Trigger with phrases like "ideogram architecture", "ideogram best practices",
  "ideogram project structure", "how to organize ideogram", "ideogram layout".
allowed-tools: Read, Grep
version: 1.0.0
license: MIT
author: Jeremy Longshore <[email protected]>
---

# Ideogram Reference Architecture

## Overview
Production-ready architecture patterns for Ideogram integrations.

## Prerequisites
- Understanding of layered architecture
- Ideogram SDK knowledge
- TypeScript project setup
- Testing framework configured

## Project Structure

```
my-ideogram-project/
├── src/
│   ├── ideogram/
│   │   ├── client.ts           # Singleton client wrapper
│   │   ├── config.ts           # Environment configuration
│   │   ├── types.ts            # TypeScript types
│   │   ├── errors.ts           # Custom error classes
│   │   └── handlers/
│   │       ├── webhooks.ts     # Webhook handlers
│   │       └── events.ts       # Event processing
│   ├── services/
│   │   └── ideogram/
│   │       ├── index.ts        # Service facade
│   │       ├── sync.ts         # Data synchronization
│   │       └── cache.ts        # Caching layer
│   ├── api/
│   │   └── ideogram/
│   │       └── webhook.ts      # Webhook endpoint
│   └── jobs/
│       └── ideogram/
│           └── sync.ts         # Background sync job
├── tests/
│   ├── unit/
│   │   └── ideogram/
│   └── integration/
│       └── ideogram/
├── config/
│   ├── ideogram.development.json
│   ├── ideogram.staging.json
│   └── ideogram.production.json
└── docs/
    └── ideogram/
        ├── SETUP.md
        └── RUNBOOK.md
```

## Layer Architecture

```
┌─────────────────────────────────────────┐
│             API Layer                    │
│   (Controllers, Routes, Webhooks)        │
├─────────────────────────────────────────┤
│           Service Layer                  │
│  (Business Logic, Orchestration)         │
├─────────────────────────────────────────┤
│          Ideogram Layer        │
│   (Client, Types, Error Handling)        │
├─────────────────────────────────────────┤
│         Infrastructure Layer             │
│    (Cache, Queue, Monitoring)            │
└─────────────────────────────────────────┘
```

## Key Components

### Step 1: Client Wrapper
```typescript
// src/ideogram/client.ts
export class IdeogramService {
  private client: IdeogramClient;
  private cache: Cache;
  private monitor: Monitor;

  constructor(config: IdeogramConfig) {
    this.client = new IdeogramClient(config);
    this.cache = new Cache(config.cacheOptions);
    this.monitor = new Monitor('ideogram');
  }

  async get(id: string): Promise<Resource> {
    return this.cache.getOrFetch(id, () =>
      this.monitor.track('get', () => this.client.get(id))
    );
  }
}
```

### Step 2: Error Boundary
```typescript
// src/ideogram/errors.ts
export class IdeogramServiceError extends Error {
  constructor(
    message: string,
    public readonly code: string,
    public readonly retryable: boolean,
    public readonly originalError?: Error
  ) {
    super(message);
    this.name = 'IdeogramServiceError';
  }
}

export function wrapIdeogramError(error: unknown): IdeogramServiceError {
  // Transform SDK errors to application errors
}
```

### Step 3: Health Check
```typescript
// src/ideogram/health.ts
export async function checkIdeogramHealth(): Promise<HealthStatus> {
  try {
    const start = Date.now();
    await ideogramClient.ping();
    return {
      status: 'healthy',
      latencyMs: Date.now() - start,
    };
  } catch (error) {
    return { status: 'unhealthy', error: error.message };
  }
}
```

## Data Flow Diagram

```
User Request
     │
     ▼
┌─────────────┐
│   API       │
│   Gateway   │
└──────┬──────┘
       │
       ▼
┌─────────────┐    ┌─────────────┐
│   Service   │───▶│   Cache     │
│   Layer     │    │   (Redis)   │
└──────┬──────┘    └─────────────┘
       │
       ▼
┌─────────────┐
│ Ideogram    │
│   Client    │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│ Ideogram    │
│   API       │
└─────────────┘
```

## Configuration Management

```typescript
// config/ideogram.ts
export interface IdeogramConfig {
  apiKey: string;
  environment: 'development' | 'staging' | 'production';
  timeout: number;
  retries: number;
  cache: {
    enabled: boolean;
    ttlSeconds: number;
  };
}

export function loadIdeogramConfig(): IdeogramConfig {
  const env = process.env.NODE_ENV || 'development';
  return require(`./ideogram.${env}.json`);
}
```

## Instructions

### Step 1: Create Directory Structure
Set up the project layout following the reference structure above.

### Step 2: Implement Client Wrapper
Create the singleton client with caching and monitoring.

### Step 3: Add Error Handling
Implement custom error classes for Ideogram operations.

### Step 4: Configure Health Checks
Add health check endpoint for Ideogram connectivity.

## Output
- Structured project layout
- Client wrapper with caching
- Error boundary implemented
- Health checks configured

## Error Handling
| Issue | Cause | Solution |
|-------|-------|----------|
| Circular dependencies | Wrong layering | Separate concerns by layer |
| Config not loading | Wrong paths | Verify config file locations |
| Type errors | Missing types | Add Ideogram types |
| Test isolation | Shared state | Use dependency injection |

## Examples

### Quick Setup Script
```bash
# Create reference structure
mkdir -p src/ideogram/{handlers} src/services/ideogram src/api/ideogram
touch src/ideogram/{client,config,types,errors}.ts
touch src/services/ideogram/{index,sync,cache}.ts
```

## Resources
- [Ideogram SDK Documentation](https://docs.ideogram.com/sdk)
- [Ideogram Best Practices](https://docs.ideogram.com/best-practices)

## Flagship Skills
For multi-environment setup, see `ideogram-multi-env-setup`.

Overview

This skill provides a production-ready reference architecture for building Ideogram integrations, including a recommended project layout, layered design, and core components like a singleton client wrapper, error boundary, and health checks. It helps teams standardize structure and accelerate safe, maintainable Ideogram applications across environments.

How this skill works

The skill inspects and documents a layered project layout (API, Service, Ideogram, Infrastructure) and prescribes concrete components: a singleton client with caching and monitoring, custom error types and wrappers, health check endpoints, and environment-based configuration. It also maps data flow and offers scripts and patterns for directory setup, sync jobs, and test organization.

When to use it

  • Starting a new Ideogram integration or application
  • Reviewing or refactoring an existing Ideogram project structure
  • Defining architecture standards for teams using Ideogram
  • Setting up multi-environment configuration and health checks
  • Creating maintainable testing and deployment patterns

Best practices

  • Adopt a clear layer separation: API, Service, Ideogram, Infrastructure
  • Use a singleton client wrapper that encapsulates caching, retries, and monitoring
  • Transform SDK errors into application-specific error classes with retry metadata
  • Keep environment config files per environment and load them at startup
  • Put long-running sync logic into background jobs and keep controllers thin
  • Isolate tests by injecting dependencies and avoiding shared global state

Example use cases

  • Implement a webhook-driven sync: API endpoint -> service orchestration -> cached Ideogram client
  • Add a health endpoint that pings the Ideogram client and reports latency and status
  • Create a background job that reconciles Ideogram resources with local DB using the service layer
  • Establish staging and production configs with separate JSON files and load logic
  • Write unit and integration tests organized under tests/unit and tests/integration for the Ideogram layer

FAQ

How should I handle retries and timeouts?

Centralize retry and timeout policies in the client wrapper and make them configurable per environment; expose metrics for failed retry attempts.

Where do I put caching and queues?

Treat caching and queues as infrastructure concerns; reference them from the service layer and configure via the Ideogram config to keep the client stateless.