惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
G
Google Developers Blog
小众软件
小众软件
V
V2EX
月光博客
月光博客
腾讯CDC
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
Y
Y Combinator Blog
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 【当耐特】
D
Docker
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店
GitHub - mperlak/airtable-migration-audit: Audit Airtable...
mperlak · 2026-04-22 · via Hacker News: Show HN

Scan your Airtable base and get a Postgres migration plan. Tells you what's in your base, what to clean up, and outputs a target Postgres schema with types, relationships, and import order.

→ See a live sample report · Works as a CLI tool or as an AI agent skill for Claude Code, OpenAI Codex, and other coding agents.

HTML Report Preview

Runs locally. Your Airtable data is fetched directly to your machine using your read-only token, analyzed locally, and written to local report files. Nothing is sent to a Straktur backend or any third-party service. You decide if and with whom you share the results.

Why this exists

I've run Mroomy for 6 years — we design children's rooms for customers across Poland and several European markets. Around 2,500 rooms designed, each with its own quirks, add-ons, and one-off decisions. The Airtable base we built along the way grew to 49,000+ records across multiple interconnected bases.

When we finally decided to migrate off Airtable, the first question wasn't "how do I export the data." It was "what should I actually bring?"

After 6 years of quick fixes, the base was a mess:

  • Fields added "just for now" that never got removed — including one literally named Field 56
  • SingleSelects that degenerated into comma-separated values — e.g. a choice named PREMIUM, EXTRA_CHARGE (package tier and a billing flag crammed into one select value because adding a new column felt like too much work at the time)
  • Text fields with 17 unique values across 1,500 records — obvious lookup-table candidates nobody had time to normalize
  • Linked records configured as single-link but actually used many-to-many
  • Automations referencing columns nobody remembered adding

No existing tool gave me a full picture of what was worth migrating vs. what was dead weight. So I wrote one.

This tool reads your Airtable base — schema and all records — and tells you what's in there before you touch anything. Null rates, cardinality, relationship patterns, dictionary candidates, duplicate-looking choices. Plus a MIGRATION.json with a target Postgres schema you can feed to an AI agent or implement manually.

It doesn't move data. It tells you what to plan for.

What it audits

  • Schema structure — tables, fields, types, relationships, dependency graph, import order
  • Data quality — null rates, value distributions, constant fields, composite values, similar choices (typo detection)
  • Migration complexity — Many-to-One vs Many-to-Many relationships, circular dependencies, cross-base links
  • Recommendations — target PostgreSQL schema, dictionary candidates, computed fields to recreate, attachment migration plan

Quick Start

💡 Want to see what the output looks like first? View the interactive sample report → (7 tables, 37k records, 67 warnings)

Requires Node.js 18+ and npm.

git clone https://github.com/mperlak/airtable-migration-audit.git
cd airtable-migration-audit
npm install
cp .env.example .env       # ← set AIRTABLE_API_KEY (required)

Now choose how you want to use it:

1. Run as CLI:

npm run discover           # Full analysis — schema + all records (minutes)
npm run discover:schema    # Fast — schema only (seconds)

Open data/**/AIRTABLE_REPORT.html in your browser to see the results.

2. Use as AI Agent Skill — install /airtable-migration-audit and the agent runs the audit, reads the report, and delivers a structured migration verdict:

# Claude Code
/plugin marketplace add mperlak/airtable-migration-audit
/plugin install airtable-migration-audit

# OpenAI Codex
$skill-installer install https://github.com/mperlak/airtable-migration-audit/tree/main/skills/airtable-migration-audit

# Any agent (Agent Skills spec — https://agentskills.io)
npx skills add mperlak/airtable-migration-audit

Then run /airtable-migration-audit in your agent.

Two Modes

Mode Command Time Data fetched Best for
Schema only npm run discover:schema Seconds Table structure, fields, relationships Initial overview, understanding structure
Full analysis npm run discover Minutes Schema + all records Pre-migration analysis, data quality audit

Schema-only report includes:

  • Table and field inventory
  • Field types and configurations
  • Select field choices
  • Linked record relationships
  • Dependency graph / import order
  • Cross-base link detection

Full report adds:

  • Per-field null rates and value distributions
  • Text field length statistics
  • Numeric field ranges (min/max/avg/median)
  • Relationship cardinality analysis (Many-to-One vs Many-to-Many from actual data)
  • Dictionary candidate detection (fields with few unique values)
  • Data quality flags (long text, unused choices, high nullity)
  • MIGRATION.json — machine-consumable migration spec (see below)

Environment Variables

Variable Required Description
AIRTABLE_API_KEY Yes Personal Access Token (pat...). Create one here. Scopes: schema.bases:read (schema-only), add data.records:read (full)
AIRTABLE_BASE_IDS No Comma-separated base IDs (appXXX,appYYY). If omitted, the tool lists all bases available for the token and prompts you to choose.
AIRTABLE_USE_FIELD_IDS No Set to false to use field names instead of IDs as record keys. Default: true

Output

Each run creates a timestamped subfolder under data/:

data/
  2025-01-15_0930_appXXX_appYYY/
    AIRTABLE_REPORT.md     # Markdown report (for agents / CLI)
    AIRTABLE_REPORT.html   # Interactive HTML report (open in browser)
    MIGRATION.json         # Structured migration spec (full mode only)
    raw-schema.json        # Raw Airtable schema
  2025-01-15_1415_appXXX_appYYY/
    ...

Each run includes a timestamp (HHMM) so previous reports are never overwritten. The HTML report is a single self-contained file with dark/light mode, collapsible sections, and sidebar navigation — no external dependencies.

MIGRATION.json — ready-to-use PostgreSQL migration spec

Generated in full mode only (requires record data for cardinality and validation analysis). This file is a framework-agnostic, machine-consumable PostgreSQL migration specification. Framework adapters (e.g. Straktur, Prisma, Django) consume this file to scaffold target applications.

The JSON contains:

  • Tables — each with a proposed dbTableName (mechanical snake_case, no translation), record count, and import order
  • Columns — Airtable type → PostgreSQL type mapping (e.g. singleLineTextvarchar(150), number with decimals → numeric(12,2)), nullability, optional defaults, and validation constraints
  • Relations — Many-to-One foreign keys derived from linked record cardinality analysis
  • Junction tables — auto-generated for Many-to-Many relationships and multi-select fields
  • Lookup tables — single/multi-select fields extracted into dedicated lookup tables, with all values and usage counts
  • Computed fields — formulas, rollups, counts flagged as recreateAs: "app-logic"
  • Skip list — auto-numbers, system fields (createdBy, lastModifiedTime) that have DB-native equivalents
  • Import order — topologically sorted table list respecting foreign key dependencies

Example (abbreviated):

You can feed this file directly to an AI coding agent to scaffold your target application — or use it as a reference for manual schema design.

Project Structure

airtable-migration-audit/
├── src/
│   ├── discover.ts                  # Main script (--schema-only flag)
│   └── lib/
│       ├── airtable-client.ts       # API client: schema + record fetching
│       ├── data-analyzer.ts         # Per-field statistics (full mode)
│       ├── schema-report-generator.ts  # Schema-only report
│       ├── report-generator.ts      # Full analysis report
│       ├── migration-json-generator.ts # MIGRATION.json output
│       └── mapping.ts              # AT record ID ↔ target ID persistence
├── skills/                         # Skills (for plugin distribution)
├── .claude-plugin/                 # Plugin marketplace manifest
├── data/                           # Generated output (gitignored)
├── package.json
└── tsconfig.json

Design

  • Zero external dependencies in library code — only Node built-ins (fs, path) and native fetch
  • Only dotenv and tsx as project dependencies
  • Pure functions for analysis and report generation
  • Standalone — no framework dependencies