Skip to content

Commit f95a3a9

Browse files
committed
better seo and title
1 parent f62df2e commit f95a3a9

11 files changed

+123
-83
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ serve:
6363

6464
.Phony: run
6565
run:
66-
FORCE=1 deno run -A --watch=tal.ts,templates/ main.ts --no-fetch
66+
LIMIT=3 FORCE=1 deno run -A --watch=tal.ts,templates/ tal.ts --no-fetch --html "ripienaar/free-for-dev"
6767

6868

6969
.Phony: initdb

build-by-source.ts

Lines changed: 46 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
1-
import {
2-
CSS,
3-
DB,
4-
groupBy,
5-
jsonfeedToAtom,
6-
mustache,
7-
path,
8-
titleCase,
9-
} from "./deps.ts";
1+
import { CSS, DB, groupBy, jsonfeedToAtom, mustache, path } from "./deps.ts";
102
import {
113
BuildOptions,
124
BuiltMarkdownInfo,
135
DayInfo,
146
Feed,
7+
FeedInfo,
158
FeedItem,
169
FileInfo,
1710
Item,
@@ -23,6 +16,7 @@ import {
2316
CONTENT_DIR,
2417
INDEX_HTML_PATH,
2518
INDEX_MARKDOWN_PATH,
19+
SUBSCRIPTION_URL,
2620
} from "./constant.ts";
2721
import {
2822
formatHumanTime,
@@ -42,6 +36,7 @@ import {
4236
readTextFile,
4337
slugy,
4438
startDateOfWeek,
39+
titleCase,
4540
writeJSONFile,
4641
writeTextFile,
4742
} from "./util.ts";
@@ -98,9 +93,9 @@ export default async function main(
9893
);
9994
relativeFolder = path.join(relativeFolder, originalFilepathWithoutExt);
10095
}
96+
const baseFeed = getBaseFeed();
10197
for (let i = 0; i < 2; i++) {
10298
const buildMarkdownStartTime = Date.now();
103-
const baseFeed = getBaseFeed();
10499
const isDay = i === 0;
105100
let currentNavHeader = `[ Daily / [Weekly](${
106101
pathnameToWeekFilePath(fileConfig.pathname)
@@ -112,20 +107,16 @@ export default async function main(
112107
pathnameToOverviewFilePath(fileConfig.pathname)
113108
}) ]`;
114109
}
115-
const nav = `[Home](/${INDEX_MARKDOWN_PATH}) · [Feed](${
110+
const nav = `[🏠 Home](/${INDEX_MARKDOWN_PATH}) · [🔥 Feed](${
116111
pathnameToFeedUrl(fileConfig.pathname, isDay)
117-
}) · [Repo](${
112+
}) · [📮 Subscribe](${SUBSCRIPTION_URL}) · [🔗 ${sourceIdentifier}](${
118113
getRepoHTMLURL(repoMeta.url, repoMeta.default_branch, originalFilepath)
119-
}) · ${sourceCategory} · ⭐ ${
120-
formatNumber(repoMeta.stargazers_count)
121-
} · 📝 ${formatHumanTime(new Date(dbFileMeta.updated_at))} · ✅ ${
122-
formatHumanTime(new Date(dbFileMeta.checked_at))
123-
}
114+
}) · ⭐ ${formatNumber(repoMeta.stargazers_count)} · 🏷️ ${sourceCategory}
124115
125116
${currentNavHeader}
126117
127118
`;
128-
const feedTitle = `Track ${titleCase(repoMeta.name)} ${
119+
const feedTitle = `Track ${fileConfig.name} Updates ${
129120
isDay ? "Daily" : "Weekly"
130121
}`;
131122
const feedDescription = repoMeta.description;
@@ -190,7 +181,8 @@ ${currentNavHeader}
190181
const url = `${domain}/${slug}`;
191182
const feedItem: FeedItem = {
192183
id: itemUrl,
193-
title: dayInfo.name,
184+
title: `${fileConfig.name} Updates on ${dayInfo.name}`,
185+
_short_title: dayInfo.name,
194186
_slug: slug,
195187
_filepath: pathnameToFilePath("/" + slug),
196188
url: itemUrl,
@@ -211,24 +203,30 @@ ${currentNavHeader}
211203
return bDate.getTime() - aDate.getTime();
212204
});
213205

214-
const title = `Track ${repoMeta.name} ${isDay ? "Daily" : "Weekly"}`;
215-
const feed: Feed = {
206+
const feedSeoTitle =
207+
`Track ${fileConfig.name} (${sourceIdentifier}) Updates ${
208+
isDay ? "Daily" : "Weekly"
209+
}`;
210+
const feedInfo: FeedInfo = {
216211
...baseFeed,
217-
title,
218-
_seo_title: `${title} - ${siteConfig.title}`,
212+
title: feedTitle,
213+
_seo_title: `${feedSeoTitle} - ${siteConfig.title}`,
219214
description: repoMeta.description,
220215
home_page_url: `${domain}/${dailyRelativeFolder}/`,
221216
feed_url: `${domain}/${dailyRelativeFolder}/feed.json`,
222-
items: feedItems,
223217
_nav_text: nav,
224218
};
219+
const feed: Feed = {
220+
...feedInfo,
221+
items: feedItems,
222+
};
225223
const markdownDoc = `# ${feed.title}
226224
227225
${feed.description}
228226
229227
${feed._nav_text}${
230228
feedItems.map((item) => {
231-
return `\n\n## [${item.title}](/${CONTENT_DIR}/${item._external_slug}${INDEX_MARKDOWN_PATH})${item.content_text}`;
229+
return `\n\n## [${item._short_title}](/${CONTENT_DIR}/${item._external_slug}${INDEX_MARKDOWN_PATH})${item.content_text}`;
232230
}).join("")
233231
}`;
234232
if (isBuildMarkdown) {
@@ -250,7 +248,7 @@ ${feed._nav_text}${
250248
// add body, css to feed
251249
const body = renderMarkdown(markdownDoc);
252250
const htmlDoc = mustache.render(htmlIndexTemplateContent, {
253-
...feed,
251+
...feedInfo,
254252
body,
255253
CSS,
256254
});
@@ -320,14 +318,15 @@ ${feed._nav_text}${
320318
pathnameToFilePath(fileConfig.pathname)
321319
}) / [Weekly](${pathnameToWeekFilePath(fileConfig.pathname)}) / Overview ]`;
322320

323-
const nav = `
324-
[Home](/${INDEX_MARKDOWN_PATH}) · [Feed](${
321+
const nav = `[🏠 Home](/${INDEX_MARKDOWN_PATH}) · [🔥 Feed](${
325322
pathnameToFeedUrl(fileConfig.pathname, true)
326-
}) · [Repo](${
327-
getRepoHTMLURL(repoMeta.url, repoMeta.default_branch, filepath)
328-
}) · ⭐ ${formatNumber(repoMeta.stargazers_count)} · 📝 ${
323+
}) · [📮 Subscribe](${SUBSCRIPTION_URL}) · [🔗 Repo](${
324+
getRepoHTMLURL(repoMeta.url, repoMeta.default_branch, originalFilepath)
325+
}) · ⭐ ${
326+
formatNumber(repoMeta.stargazers_count)
327+
} · 🏷️ ${sourceCategory} · 📝 ${
329328
formatHumanTime(new Date(dbFileMeta.updated_at))
330-
} · ✅ ${formatHumanTime(new Date(dbFileMeta.checked_at))}
329+
}
331330
332331
${currentNavHeader}
333332
@@ -339,13 +338,9 @@ ${currentNavHeader}
339338
"readme",
340339
INDEX_MARKDOWN_PATH,
341340
);
342-
const overviewHtmlPath = path.join(
343-
getPublicPath(),
344-
relativeFolder,
345-
"readme",
346-
INDEX_HTML_PATH,
347-
);
348-
const readmeRendered = `# ${repoMeta.name}
341+
const overviewTitle = `${fileConfig.name} Overview`;
342+
343+
const readmeRendered = `# ${overviewTitle}
349344
350345
${repoMeta.description}
351346
@@ -363,8 +358,19 @@ ${readmeContent}
363358
if (isBuildHtml) {
364359
// add body, css to feed
365360
const body = renderMarkdown(readmeRendered);
361+
const overviewSeoTitle =
362+
`${fileConfig.name} (${sourceIdentifier}) Overview`;
363+
const overviewFeedInfo: FeedInfo = {
364+
...baseFeed,
365+
title: overviewTitle,
366+
_seo_title: `${overviewSeoTitle} - ${siteConfig.title}`,
367+
description: repoMeta.description,
368+
home_page_url: `${domain}/${relativeFolder}/readme/`,
369+
feed_url: `${domain}/${relativeFolder}/feed.json`,
370+
_nav_text: "",
371+
};
366372
const htmlDoc = mustache.render(htmlIndexTemplateContent, {
367-
_seo_title: `${titleCase(repoMeta.name)}`,
373+
...overviewFeedInfo,
368374
body: body,
369375
CSS,
370376
});

build-by-time.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
INDEX_HTML_PATH,
1818
INDEX_MARKDOWN_PATH,
1919
RECENTLY_UPDATED_COUNT,
20+
SUBSCRIPTION_URL,
2021
} from "./constant.ts";
2122
import {
2223
exists,
@@ -70,7 +71,7 @@ export default async function main(
7071
}
7172

7273
const config = options.config;
73-
const sourcesConfig = config.sources;
74+
const siteConfig = config.site;
7475
let title = "";
7576
let commitMessage = "";
7677
let items: Record<string, Item> = {};
@@ -84,30 +85,32 @@ export default async function main(
8485
if (isDay) {
8586
const dayInfo = parseDayInfo(number);
8687
commitMessage = `Update day ${dayInfo.path}`;
87-
title = dayInfo.name;
88+
title = `Awesome List Updates on ${dayInfo.name}`;
8889
distMarkdownRelativePath = dayInfo.path;
8990
// get items
9091
items = getDayItems(db, number);
9192
} else {
9293
const weekInfo = parseWeekInfo(number);
9394
commitMessage = `Update week ${weekInfo.path}`;
94-
title = weekInfo.name;
95+
title = `Awesome List Updates on ${weekInfo.name}`;
9596
distMarkdownRelativePath = weekInfo.path;
9697
// get items
9798
items = getWeekItems(db, number);
9899
}
99100
feedTitle = `${title}`;
100-
feedDescription = `Awesome list updated on ${title}`;
101-
102101
const feedItems = itemsToFeedItems(items, config);
103-
const nav = `[Home](/${INDEX_MARKDOWN_PATH}) · [Feed](${
104-
pathnameToFeedUrl("/", true)
105-
}) `;
102+
feedDescription = `${feedItems.length} awesome lists updated ${
103+
isDay ? "today" : "this week"
104+
}.`;
105+
106+
const nav = `[🏠 Home](/${INDEX_MARKDOWN_PATH}) · [🔥 Feed](${
107+
pathnameToFeedUrl("/" + (isDay ? "" : "week/"), true)
108+
}) · [📮 Subscribe](${SUBSCRIPTION_URL}) `;
106109
const feed: Feed = {
107110
...baseFeed,
108111
title: feedTitle,
109112
description: feedDescription,
110-
_seo_title: feedTitle,
113+
_seo_title: `${feedTitle} - ${siteConfig.title}`,
111114
feed_url: `${domain}/feed.json`,
112115
home_page_url: domain,
113116
_nav_text: nav,
@@ -342,7 +345,8 @@ export function itemsToFeedItemsByDate(
342345
const itemUrl = `${domain}/${slug}`;
343346
const feedItem: FeedItem = {
344347
id: itemUrl,
345-
title: dayInfo.name,
348+
title: `Awesome List Updated on ${dayInfo.name}`,
349+
_short_title: dayInfo.name,
346350
_slug: slug,
347351
_filepath: pathnameToFilePath("/" + slug),
348352
url: itemUrl,

build.ts

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { fs, path, pLimit } from "./deps.ts";
33
import {
44
DayInfo,
55
Feed,
6+
FeedInfo,
67
File,
78
FileInfo,
89
FileMetaWithSource,
@@ -15,6 +16,7 @@ import {
1516
import {
1617
INDEX_MARKDOWN_PATH,
1718
RECENTLY_UPDATED_COUNT,
19+
SUBSCRIPTION_URL,
1820
TOP_REPOS_COUNT,
1921
} from "./constant.ts";
2022
import {
@@ -356,52 +358,65 @@ export default async function buildMarkdown(options: RunOptions) {
356358
for (let i = 0; i < 2; i++) {
357359
const isDay = i === 0;
358360
let lastItems: Record<string, Item> = {};
361+
let jsonFeedItems: Record<string, Item> = {};
359362
if (isDay) {
360363
lastItems = getItemsByDays(
361364
db,
362-
allDays.slice(0, 2).map((item) => item.number),
365+
allDays.slice(0, 3).map((item) => item.number),
366+
);
367+
jsonFeedItems = getItemsByDays(
368+
db,
369+
allDays.slice(1, 15).map((item) => item.number),
363370
);
364371
} else {
365372
lastItems = getItemsByWeeks(
366373
db,
367-
allWeeks.slice(0, 2).map((item) => item.number),
374+
allWeeks.slice(0, 1).map((item) => item.number),
375+
);
376+
jsonFeedItems = getItemsByDays(
377+
db,
378+
allWeeks.slice(1, 4).map((item) => item.number),
368379
);
369380
}
370381

371382
// console.log("lastItems", lastItems);
372383
const feedItems = itemsToFeedItemsByDate(lastItems, config, isDay);
373384

385+
const jsonFeedItemsByDate = itemsToFeedItemsByDate(
386+
jsonFeedItems,
387+
config,
388+
isDay,
389+
);
374390
const indexMarkdownDistPath = path.join(
375391
getDistRepoContentPath(),
376392
isDay ? INDEX_MARKDOWN_PATH : `week/${INDEX_MARKDOWN_PATH}`,
377393
);
378394
const baseFeed = getBaseFeed();
379395
let indexNav = "";
380396
if (isDay) {
381-
indexNav = `[View by Weekly](/week/README.md)· [Feed](${
397+
indexNav = `[📅 Weekly](/week/README.md) · [🔥 Feed](${
382398
pathnameToFeedUrl("/", true)
383-
}) · 📝 ${formatHumanTime(dbItemsLatestUpdatedAt)} · ${
384-
formatHumanTime(new Date(dbMeta.checked_at))
385-
}`;
399+
}) · [📮 Subscribe](${SUBSCRIPTION_URL}) · 📝 ${
400+
formatHumanTime(dbItemsLatestUpdatedAt)
401+
} · ✅ ${formatHumanTime(new Date(dbMeta.checked_at))}`;
386402
} else {
387-
indexNav = `[Home](/README.md)· [Feed](${
403+
indexNav = `[🏠 Home](/README.md)· [🔥 Feed](${
388404
pathnameToFeedUrl("/week/", true)
389-
}) · 📝 ${formatHumanTime(dbItemsLatestUpdatedAt)} · ${
390-
formatHumanTime(new Date(dbMeta.checked_at))
391-
}`;
405+
}) · [📮 Subscribe](${SUBSCRIPTION_URL}) · 📝 ${
406+
formatHumanTime(dbItemsLatestUpdatedAt)
407+
} · ✅ ${formatHumanTime(new Date(dbMeta.checked_at))}`;
392408
}
393-
const indexFeed: Feed = {
409+
const indexFeed: FeedInfo = {
394410
...baseFeed,
395-
title: "Track Awesome List Updates Daily",
411+
title: "Track Awesome List Updates " + (isDay ? "Daily" : "Weekly"),
396412
description: config.site.description,
397413
_nav_text: indexNav,
398414
_seo_title:
399-
`${config.site.title} - Track your Favorite Github Awesome Repo Weekly`,
400-
home_page_url: config.site.url,
401-
feed_url: config.site.url + "/feed.json",
402-
items: [
403-
...feedItems.slice(1),
404-
],
415+
`${config.site.title} - Track your Favorite Github Awesome List ${
416+
isDay ? "Daily" : "Weekly"
417+
}`,
418+
home_page_url: config.site.url + (isDay ? "/" : "/week/"),
419+
feed_url: config.site.url + (isDay ? "/" : "/week/") + "feed.json",
405420
};
406421
const groupByCategory = (sourceIdentifier: string) => {
407422
const sourceConfig = sourcesConfig[sourceIdentifier];
@@ -432,10 +447,7 @@ export default async function buildMarkdown(options: RunOptions) {
432447
sortedRepos,
433448
items: feedItems,
434449
list,
435-
feed: {
436-
...indexFeed,
437-
items: [],
438-
},
450+
feed: indexFeed,
439451
};
440452
// build summary.md
441453
let summary = "# Track Awesome List\n\n [README](README.md)\n\n";
@@ -533,10 +545,15 @@ export default async function buildMarkdown(options: RunOptions) {
533545
getPublicPath(),
534546
isDay ? "feed.json" : `week/feed.json`,
535547
);
536-
await writeJSONFile(feedJsonDistPath, indexFeed);
548+
const finalFeed = {
549+
...indexFeed,
550+
items: jsonFeedItemsByDate,
551+
};
552+
553+
await writeJSONFile(feedJsonDistPath, finalFeed);
537554
// build rss
538555
// @ts-ignore: node modules
539-
const feedOutput = jsonfeedToAtom(indexFeed, {
556+
const feedOutput = jsonfeedToAtom(finalFeed, {
540557
language: "en",
541558
});
542559
const rssDistPath = path.join(

0 commit comments

Comments
 (0)