Smoke Signal Blog

Beyond Parties and Concerts: Using Calendar Events as a Status Page Protocol

Published by @smokesignal.events on 2025-08-12 21:00 UTC.

When we think about calendar events in the ATProtocol ecosystem, our minds naturally drift to concerts, meetups, and social gatherings. But what if we stretched our imagination a bit? What if an "event" could represent something entirely different—like a service outage or maintenance window? Let's explore how the flexible nature of the Lexicon Community calendar schema opens doors to creative applications we might not have initially considered.

The Fundamental Nature of Events

At its core, an event is surprisingly simple: it's information bounded by time, and optionally, location. When you strip away our conventional associations, this definition becomes remarkably versatile. A website outage fits this model perfectly—it has a start time, potentially an end time, a description of what's happening, and a status that evolves over time.

This realization opens up an interesting possibility: could we use the existing community.lexicon.calendar.event schema as the foundation for a decentralized status page system?

Extending the Schema Through Open Types

The beauty of the Lexicon calendar event schema lies in its flexibility. The status field, while having some predefined values, is actually an open string type. This design decision means we can introduce our own domain-specific status types without breaking compatibility with existing implementations.

Here's how we might define status types specifically for incident management:

{
    "defs": {
        "closed": {
            "description": "An incident that has been documented and all remaining remediation concluded.",
            "type": "token"
        },
        "investigating": {
            "description": "An incident that is being investigated.",
            "type": "token"
        },
        "open": {
            "description": "An incident that is open / in-progress.",
            "type": "token"
        },
        "planned": {
            "description": "A planned / scheduled maintenance event.",
            "type": "token"
        },
        "resolved": {
            "description": "An incident that is closed / resolved.",
            "type": "token"
        }
    },
    "id": "garden.lexicon.ngerakines.statusevent.status",
    "lexicon": 1
}

Notice how these status types mirror the lifecycle of an incident: from investigation through resolution to final closure. By namespacing these under a custom lexicon ID, we maintain clear separation from standard calendar event statuses while leveraging the same underlying infrastructure.

Practical Implementation

Let's look at what an actual incident record might look like using this approach:

{
    "$type": "community.lexicon.calendar.event",
    "description": "An upstream provider appears to be having issues. We are investigating the impact on our services.",
    "name": "Ongoing upstream provider outage",
    "startsAt": "2025-08-12T11:00:00.000Z",
    "status": "garden.lexicon.ngerakines.statusevent.status#investigating"
}

What makes this approach particularly elegant is how naturally it maps to incident management workflows. As the situation evolves, you can update the record with new information:

{
    "$type": "community.lexicon.calendar.event",
    "description": "Upstream provider has confirmed the issue. Mitigation in progress.",
    "name": "Ongoing upstream provider outage",
    "startsAt": "2025-08-12T11:00:00.000Z",
    "status": "garden.lexicon.ngerakines.statusevent.status#open",
}

And eventually, when the incident is resolved:

{
    "$type": "community.lexicon.calendar.event",
    "description": "Issue resolved. All services operating normally. Upstream provider had confirmed issue.",
    "name": "Upstream provider outage - Resolved",
    "startsAt": "2025-08-12T11:00:00.000Z",
    "endsAt": "2025-08-12T14:45:00.000Z",
    "status": "garden.lexicon.ngerakines.statusevent.status#resolved"
}

Architecture and Data Flow

The implementation architecture for this system would be refreshingly straightforward. A small status application would publish events to a dedicated DID (such as did:web:status.smokesignal.events). This application would:

  1. Monitor your services for health and availability
  2. Create and update event records when incidents occur
  3. Publish these records to the ATProtocol network

On the consumption side, interested parties could subscribe to the Jetstream events from this specific DID and collection. This creates a real-time, decentralized status update system where:

Beyond Simple Status Updates

This pattern opens up several interesting possibilities that go beyond traditional status pages:

Scheduled Maintenance Windows: By using the planned status type and future startsAt timestamps, you can announce maintenance windows well in advance. Consumers of your status feed could automatically notify their users or adjust their retry logic accordingly.

{
    "$type": "community.lexicon.calendar.event",
    "name": "Scheduled Database Maintenance",
    "description": "Regular monthly database optimization. Expect brief interruptions.",
    "startsAt": "2025-08-20T03:00:00.000Z",
    "endsAt": "2025-08-20T04:00:00.000Z",
    "status": "garden.lexicon.ngerakines.statusevent.status#planned"
}

Service Dependencies: You could extend the schema to include affected services or dependencies, creating a richer picture of your infrastructure's state:

Multi-tenant Status Aggregation: Organizations running multiple services could use different DIDs for each service, allowing consumers to subscribe selectively to the services they care about while still maintaining a unified protocol. A status page could subscribe to record changes for DIDs and aggregate them.

Comparison with Traditional Approaches

This ATProtocol-based approach offers several advantages over traditional status page solutions:

The decentralized nature means your status updates remain accessible even when your primary infrastructure is compromised. There's no single point of failure—if your website is down, your status updates can still flow through the network.

The subscription model through Jetstream provides real-time updates without the overhead of constant polling. Interested parties receive updates as they happen, reducing both latency and bandwidth consumption.

Perhaps most importantly, this approach treats incidents as first-class data objects with standardized schemas. This enables sophisticated tooling and automation that would be otherwise difficult to achieve.

Implementation Considerations

While this approach is powerful, there are some practical considerations to keep in mind:

Event Lifecycle Management: Unlike traditional calendar events that typically represent a single point or span in time, incidents evolve through multiple states. You'll need to decide whether to update existing records or create new ones for each state transition. Updating existing records maintains continuity but might complicate change tracking.

Historical Data: The append-only nature of the ATProtocol provides excellent audit trails, but you'll need to consider how to handle long-term storage and retrieval of historical incidents.

Schema Evolution: As your needs grow, you might want to add additional fields or status types. The Lexicon system's versioning capabilities help here, but you'll need to ensure backward compatibility for existing consumers.

Looking Forward

This exploration of using calendar events for status pages is just one example of how we can creatively repurpose existing schemas in the ATProtocol ecosystem. The same pattern could be applied to other domains:

The key insight is that many types of information naturally fit the event model when we think about them as time-bounded data points. By leveraging existing, well-understood schemas, we can build interoperable systems without reinventing the wheel.

Conclusion

The flexibility of the Lexicon Community calendar schema demonstrates the power of thoughtfully designed, extensible protocols. By thinking beyond the obvious use cases, we can build innovative solutions that leverage existing infrastructure in unexpected ways.

This approach to status pages—treating incidents as calendar events—provides a decentralized, real-time, and standardized way to communicate service status. It's a pattern that could be adopted by any service in the ATProtocol ecosystem, creating a consistent experience for users while maintaining the independence and resilience that comes with decentralization.

As the ATProtocol ecosystem continues to evolve, we'll likely discover even more creative applications for these fundamental building blocks. The question isn't just "what is this schema designed for?" but rather "what could we build with it?" Sometimes, the most interesting innovations come from seeing familiar tools in a new light.


Want to experiment with this approach? The schemas and example code discussed in this article are available for use and modification by anyone. Consider how you might adapt this pattern for your own services, or explore other creative uses of existing ATProtocol schemas. The beauty of open protocols is that we're all free to innovate within their framework.

This post has had 1 interaction.