···2626 typeof v.site === "string" &&
2727 typeof v.path === "string" &&
2828 typeof v.textContent === "string" &&
2929- typeof v.publishedAt === "string"
2929+ typeof v.publishedAt === "string" &&
3030+ (v.updatedAt === undefined || typeof v.updatedAt === "string")
3031 );
3132}
3233···252253 );
253254 const publishDate = new Date(post.frontmatter.publishDate);
254255256256+ // Handle updatedAt: only set if explicitly provided in frontmatter
257257+ let updatedAt: Date | undefined;
258258+ if (post.frontmatter.updatedAt) {
259259+ updatedAt = new Date(post.frontmatter.updatedAt);
260260+ }
261261+255262 // Determine textContent (if enabled): use configured field from frontmatter, or fallback to markdown body
256263 let textContent: string | null = null;
257264 if (
···273280 publishedAt: publishDate.toISOString(),
274281 canonicalUrl: `${config.siteUrl}${postPath}`,
275282 };
283283+284284+ if (updatedAt) {
285285+ record.updatedAt = updatedAt.toISOString();
286286+ }
276287277288 if (post.frontmatter.description) {
278289 record.description = post.frontmatter.description;
···318329 );
319330 const publishDate = new Date(post.frontmatter.publishDate);
320331332332+ // Handle updatedAt: only set if explicitly provided in frontmatter
333333+ let updatedAt = post.frontmatter.updatedAt
334334+ ? new Date(post.frontmatter.updatedAt)
335335+ : undefined;
336336+321337 // Determine textContent (if enabled): use configured field from frontmatter, or fallback to markdown body
322338 let textContent: string | null = null;
323339 if (
···348364 publishedAt: publishDate.toISOString(),
349365 canonicalUrl: `${config.siteUrl}${postPath}`,
350366 };
367367+368368+ if (updatedAt) {
369369+ record.updatedAt = updatedAt.toISOString();
370370+ }
351371352372 if (post.frontmatter.description) {
353373 record.description = post.frontmatter.description;
···388408 path: string;
389409 textContent?: string;
390410 publishedAt: string;
411411+ updatedAt?: string;
391412 canonicalUrl?: string;
392413 description?: string;
393414 coverImage?: BlobObject;
+17
packages/cli/src/lib/markdown.ts
···7575 }
7676 }
77777878+ // Updated date mapping - check custom field first, then fallbacks
7979+ const updatedAtField = mapping?.updatedAt;
8080+ if (updatedAtField && raw[updatedAtField]) {
8181+ frontmatter.updatedAt = raw[updatedAtField];
8282+ } else if (raw.updatedAt) {
8383+ frontmatter.updatedAt = raw.updatedAt;
8484+ } else {
8585+ // Fallback to common date field names
8686+ const updatedAtFields = ["updated_at", "modifiedAt", "modified_at"];
8787+ for (const field of updatedAtFields) {
8888+ if (raw[field]) {
8989+ frontmatter.updatedAt = raw[field];
9090+ break;
9191+ }
9292+ }
9393+ }
9494+7895 // Cover image mapping
7996 const coverField = mapping?.coverImage || "ogImage";
8097 frontmatter.ogImage = raw[coverField] || raw.ogImage;
+2
packages/cli/src/lib/types.ts
···22 title?: string; // Field name for title (default: "title")
33 description?: string; // Field name for description (default: "description")
44 publishDate?: string; // Field name for publish date (default: "publishDate", also checks "pubDate", "date", "createdAt", "created_at")
55+ updatedAt?: string; // Field name for updated date (default: "updatedAt", also checks "updated_at", "modifiedAt", "modified_at")
56 coverImage?: string; // Field name for cover image (default: "ogImage")
67 tags?: string; // Field name for tags (default: "tags")
78 draft?: string; // Field name for draft status (default: "draft")
···9091 description?: string;
9192 bskyPost?: string;
9293 publishDate: string;
9494+ updatedAt?: string;
9395 tags?: string[];
9496 ogImage?: string;
9597 atUri?: string;
+5
sequoia.schema.json
···7070 "description": "Field name for publish date (checks \"publishDate\", \"pubDate\", \"date\", \"createdAt\", and \"created_at\" by default)",
7171 "default": "publishDate"
7272 },
7373+ "updatedAt": {
7474+ "type": "string",
7575+ "description": "Field name for updated date (checks \"updatedAt\", \"updated_at\", \"modifiedAt\", and \"modified_at\" by default)",
7676+ "default": "updatedAt"
7777+ },
7378 "coverImage": {
7479 "type": "string",
7580 "description": "Field name for cover image",