summaryrefslogtreecommitdiffstats
path: root/src/server/content
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/content')
-rw-r--r--src/server/content/about.ts32
-rw-r--r--src/server/content/blog.ts35
-rw-r--r--src/server/content/feed.ts32
-rw-r--r--src/server/content/index.ts20
-rw-r--r--src/server/content/robots.ts9
-rw-r--r--src/server/content/sitemap.ts16
-rw-r--r--src/server/content/webmanifest.ts26
7 files changed, 170 insertions, 0 deletions
diff --git a/src/server/content/about.ts b/src/server/content/about.ts
new file mode 100644
index 0000000..4a988e3
--- /dev/null
+++ b/src/server/content/about.ts
@@ -0,0 +1,32 @@
+import Page from "../template/Page.js"
+import metadata from "../metadata.js"
+import { c } from "../template/vdom.js"
+import h from "../template/header.js"
+import schema from "../utils/schema.js"
+import { img, picture, source, div, p, span, ul, li, a } from "../template/html.js"
+
+Page({
+ title: "About Me",
+ url: "/about",
+ content() {
+ return c(div, { itemscope: true, itemtype: schema("Person") },
+ c(h, { level: 2, itemprop: "name" }, metadata.author.name),
+ c(picture, { class: "side" },
+ c(source, { srcset: [128, 256, 512].map(width => `${metadata.author.image}?format=png&width=${width} ${width}w`).join(", ") }),
+ c(img, { itemprop: "image", alt: "A Photo of me", src: metadata.author.image })
+ ),
+ c(p, { itemprop: "description" }, "I am an analytical and passionate third year ",
+ c(span, { itemprop: "affiliation", itemtype: schema("CollegeOrUniversity"), itemscope: true }, c(span, { itemprop: "name" }, "CHRIST University")),
+ " ", c(span, {}, "student"), ` pursuing B. Tech in Computer Engineering in Bengaluru. I am eager to further my knowledge, develop my skills ",
+ "and gain experience to convert my interest in computers into a fulfilling career.`),
+ c(p, {}, "Contact Details"),
+ c(ul, {},
+ c(li, {}, c(a, { href: `mailto:${metadata.author.email}`, itemprop: "email" }, "Email")),
+ c(li, {}, c(a, { href: "https://github.com/marcthe12", itemprop: "sameas" }, "Github")),
+ c(li, {}, c(a, { href: "https://www.linkedin.com/in/marc-pervaz-boocha-200706236/", itemprop: "sameas" }, "LinkedIn")),
+ ),
+ )
+ }
+}).setupRoute()
+
+
diff --git a/src/server/content/blog.ts b/src/server/content/blog.ts
new file mode 100644
index 0000000..373b1ca
--- /dev/null
+++ b/src/server/content/blog.ts
@@ -0,0 +1,35 @@
+import { posts } from "../template/Post.js"
+import Base from "../template/Base.js"
+import { c } from "../template/vdom.js"
+import h from "../template/header.js"
+import relUrl from "../utils/relUrl.js"
+import schema from "../utils/schema.js"
+import metadata from "../metadata.js"
+import { div, article, a, small, time, span, p } from "../template/html.js"
+
+Base({
+ title: "Blog Posts",
+ url: "/blog",
+ content() {
+ return c(div, { itemscope: true, itemtype: schema("Blog"), role: "feed", "aria-busy": "false" },
+ ...posts.map((post, index, { length }) => {
+ const { date_mod, date_pub, title, description, url } = post
+ return c(article, { itemprop: "blogPost", itemscope: true, itemtype: schema("BlogPosting"), "aria-posinset": index, "aria-setsize": length },
+ c(h, { level: 1, itemprop: "headline" }, c(a, { href: relUrl(url), itemprop: "sameAs" }, title)),
+ c(small, {},
+ date_pub != date_mod ? [
+ c(time, { datetime: date_mod.toISOString(), itemprop: "dateModified" }, date_mod.toDateString()),
+ "- Modified "
+ ] : [],
+ c(time, { datetime: date_pub.toISOString(), itemprop: "datePublished" }, date_pub.toDateString())
+ , " - ",
+ c(span, { itemprop: "author", itemscope: true, itemtype: schema("Person") },
+ c(a, { href: metadata.author.url, rel: "author", itemprop: "url" },
+ c(span, { itemprop: "name" }, metadata.author.name))
+ ),
+ ),
+ c(p, { itemprop: "abstract" }, description)
+ )
+ }))
+ }
+}).setupRoute()
diff --git a/src/server/content/feed.ts b/src/server/content/feed.ts
new file mode 100644
index 0000000..b0d6c0f
--- /dev/null
+++ b/src/server/content/feed.ts
@@ -0,0 +1,32 @@
+import curl from "../utils/curl.js"
+import setStingRoute from "../utils/setStingRoute.js"
+import { posts } from "../template/Post.js"
+import metadata from "../metadata.js"
+import { doctype } from "../template/xml.js"
+import { c } from "../template/vdom.js"
+import { feed, title, link, summary, id, author, subtitle, updated, name, email, entry } from "../template/atom.js"
+
+setStingRoute("/feed", ["application/atom+xml", "xml"], async () => doctype({},
+ c(feed, { xmlns: new URL("http://www.w3.org/2005/Atom"), "xml:lang": metadata.language },
+ c(title, {}, metadata.title),
+ c(subtitle, {}, metadata.description),
+ c(link, { href: curl(metadata.feed.atom), rel: "self" }),
+ c(link, { href: metadata.url }),
+ ...(posts[0] ? [c(updated, { date: posts[0].date_mod })] : []),
+ c(id, { id: metadata.url }),
+ c(author, {},
+ c(name, {}, metadata.author.name),
+ c(email, {}, metadata.author.email),
+ ),
+ ...posts.map(({ url, date_mod, title: Title, description }) =>
+ c(entry, {},
+ c(title, {}, Title),
+ c(link, { href: url }),
+ c(updated, { date: date_mod }),
+ c(id, { id: url }),
+ c(summary, {}, description)
+ )
+ )
+ )
+))
+
diff --git a/src/server/content/index.ts b/src/server/content/index.ts
new file mode 100644
index 0000000..6eaa3de
--- /dev/null
+++ b/src/server/content/index.ts
@@ -0,0 +1,20 @@
+import { c } from "../template/vdom.js"
+import code from "../template/syntax.js"
+import Page from "../template/Page.js"
+import { pre } from "../template/html.js"
+
+Page({
+ title: "Welcome",
+ url: "/",
+ isHighlight: true,
+ content() {
+ return c(pre, { class: "pad", },
+ "$ ", c(code, { lang: "bash" }, "sudo cat ~root/msg"),
+ `
+Hello World!
+Welcome to my blog.
+I occassion leave my writings here. Hope you will enjoy them :).
+$`
+ )
+ }
+}).setupRoute()
diff --git a/src/server/content/robots.ts b/src/server/content/robots.ts
new file mode 100644
index 0000000..ad8e7ab
--- /dev/null
+++ b/src/server/content/robots.ts
@@ -0,0 +1,9 @@
+import curl from "../utils/curl.js"
+import setStingRoute from "../utils/setStingRoute.js"
+
+setStingRoute("/robots.txt", "robots.txt", async () => Object.entries({
+ "User-agent": "*",
+ Disallow: "",
+ Sitemap: curl("sitemap.xml")
+}).map(([key, val]) => `${key}: ${val}`).join("\n")
+)
diff --git a/src/server/content/sitemap.ts b/src/server/content/sitemap.ts
new file mode 100644
index 0000000..c9e3ef5
--- /dev/null
+++ b/src/server/content/sitemap.ts
@@ -0,0 +1,16 @@
+import { pages } from "../template/Base.js"
+import setStingRoute from "../utils/setStingRoute.js"
+import { doctype } from "../template/xml.js"
+import { c } from "../template/vdom.js"
+import { lastmod, loc, url, urlset } from "../template/sitemap.js"
+
+setStingRoute("/sitemap.xml", "sitemap.xml", async () => doctype({},
+ c(urlset, { xmlns: new URL("http://www.sitemaps.org/schemas/sitemap/0.9") },
+ ...pages.map(page =>
+ c(url, {},
+ c(loc, {}, (page.url?.href) ?? ""),
+ ...(page.date_mod ? [c(lastmod, {}, page.date_mod.toISOString())] : [])
+ )
+ )
+ )
+))
diff --git a/src/server/content/webmanifest.ts b/src/server/content/webmanifest.ts
new file mode 100644
index 0000000..6e4031e
--- /dev/null
+++ b/src/server/content/webmanifest.ts
@@ -0,0 +1,26 @@
+import metadata from "../metadata.js"
+import { contentType } from "mime-types"
+import setStingRoute from "../utils/setStingRoute.js"
+
+setStingRoute("/app.webmanifest", "app.webmanifest", async () => ({
+ $schema: "https://json.schemastore.org/web-manifest-combined.json",
+ name: metadata.title,
+ lang: metadata.language,
+ start_url: "/",
+ id: "/", scope: "/",
+ display: "minimal-ui",
+ background_color: metadata.theme,
+ theme_color: metadata.theme,
+ description: metadata.description,
+ icons: ["png", "svg"].flatMap(format => format == "svg" ? {
+ src: "/favicon.svg",
+ type: contentType(format),
+ sizes: "any",
+ purpose: "any maskable"
+ } : [192, 512, 1024].map(size => ({
+ src: `/favicon.svg?format=${format}&width=${size}`,
+ type: contentType(format),
+ sizes: `${size}x${size}`,
+ purpose: "maskable"
+ })))
+}))