What's Missing in Standard FastAPI + Railway + PostgreSQL Architecture
Without behavioral tracking in PostgreSQL, you can't identify when users become inactive or when they hit growth milestones worth celebrating. Most PostgreSQL setups don't include activity monitoring by default, requiring custom implementation.
Standard FastAPI + Railway + PostgreSQL Flow vs Optimized Skene Flow
User completes onboarding
User activity tracked manually (if at all)
No automated re-engagement when activity drops
Monitor PostgreSQL 'events' table for user activity patterns via standard features
Detect when user becomes dormant (no activity for 7 days)
Trigger re-engagement email sequence with personalized content
Track re-engagement success and adjust campaigns
Visual comparison of the flows:
Loading diagram...
How Skene Fixes This
We created a Skene Prompt that installs retention infrastructure into FastAPI + Railway + PostgreSQL. It uses PostgreSQL's standard features to monitor user activity and automatically triggers re-engagement campaigns when users become dormant.
Implementation Comparison
Using Skene Infrastructure
Install via Prompt
@task: Initialize Skene.
@action: Analyze my local code, validating subscription via `npx skene login`, and generate `skene.config.ts` to implement the Retention Loop pattern for FastAPI + Railway + PostgreSQL.Copy Skene Prompt for Cursor
Generated skene.config.ts
// skene.config.ts - The Automated Way
import { defineLoop } from '@skene/sdk';
export default defineLoop({
type: 'retention',
opinion: 'Detect dormant users and trigger personalized re-engagement campaigns',
steps: [
{
trigger: {
type: 'schedule',
cron: '0 9 * * *' // Daily at 9 AM
},
condition: {
type: 'query',
query: `SELECT * FROM users WHERE last_activity_at < NOW() - INTERVAL '7 days' AND re_engagement_sent = false`,
timeout: '10m'
},
action: {
type: 'email',
provider: 'resend',
template: 're_engagement',
personalization: {
name: '{{user.name}}',
lastActivity: '{{user.last_activity_at}}'
}
}
}
],
recovery: {
retries: 3,
backoff: 'exponential'
}
});