on master help sign in
various: add meta tags
commit098f727b6ab5599ab88a98a5c64d9a68be2830e6 authorMatilde Park <matilde@tlon.io> dateTue 27 Jul 2021, 12:42 (5 years ago) parent0c92c2c
20 files changed+91−40
components/BasicPage.js+2 components/Meta.js+25 components/PageWithIndex.js+2 pages/404.js+5 pages/blog.js+7 pages/blog/[slug].js+2−3 pages/community/[[...slug]].js+2 pages/docs/[[...slug]].js+2 pages/events.js+6−3 pages/events/[slug].js+2−4 pages/getting-started/[[...slug]].js+3−2 pages/grants.js+6−4 pages/grants/[slug].js+2−3 pages/index.js+2 pages/media.js+7 pages/media/[slug].js+3−9 pages/understanding-urbit/[[...slug]].js+2 pages/updates.js+7−8 pages/updates/[slug].js+2−4 pages/using/[[...slug]].js+2
components/BasicPage.js+2
@@ -1,5 +1,6 @@
11import { useRouter } from "next/router";
22import Head from "next/head";
3+import Meta from "../components/Meta";
34import ErrorPage from "../pages/404";
45import Container from "./Container";
56import Header from "./Header";
@@ -18,6 +19,7 @@ export default function BasicPage({ post, markdown, search }) {
1819 <Container>
1920 <Head>
2021 <title>Urbit • {post.title}</title>
22+ {Meta(post)}
2123 </Head>
2224 <SingleColumn>
2325 <Header search={search} />
components/Meta.jsnew file+25
@@ -0,0 +1,25 @@
1+export default function Meta(post) {
2+ const author = post?.extra?.author || "Urbit";
3+ const title = `${post?.title} - ` || "";
4+ const description =
5+ post?.description || "Urbit is a personal server built from scratch.";
6+ const image =
7+ post?.extra?.image || "https://media.urbit.org/logo/urbit-logo-card.png";
8+ return (
9+ <>
10+ <link rel="icon" type="image/png" href="/images/favicon.ico" />
11+ <meta
12+ name="twitter:card"
13+ content="summary_large_image"
14+ key="twitter-card"
15+ />
16+ <meta name="twitter:site" content="@urbit" key="twitter-site" />
17+ <meta name="twitter:creator" content="@urbit" key="twitter-creator" />
18+ <meta name="og:title" content={`${title}urbit.org`} key="title" />
19+ <meta name="og:description" content={description} key="description" />
20+ <meta name="description" content={description} />
21+ <meta name="author" content={author} key="author" />
22+ <meta name="twitter:image" content={image} key="image" />
23+ </>
24+ );
25+}
components/PageWithIndex.js+2
@@ -1,5 +1,6 @@
11import { useRouter } from "next/router";
22import Head from "next/head";
3+import Meta from "../components/Meta";
34import ErrorPage from "../pages/404";
45import Container from "./Container";
56import Header from "./Header";
@@ -19,6 +20,7 @@ export default function PageWithIndex({ post, markdown, search }) {
1920 <Container>
2021 <Head>
2122 <title>Urbit • {post.title}</title>
23+ {Meta(post)}
2224 </Head>
2325 <SingleColumn>
2426 <Header search={search} />
pages/404.js+5
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Container from "../components/Container";
34import SingleColumn from "../components/SingleColumn";
45import Header from "../components/Header";
@@ -6,10 +7,14 @@ import Footer from "../components/Footer";
67import Section from "../components/Section";
78
89export default function NotFound(props) {
10+ const post = {
11+ title: "404",
12+ };
913 return (
1014 <Container>
1115 <Head>
1216 <title>404 • urbit.org</title>
17+ {Meta(post)}
1318 </Head>
1419 <SingleColumn>
1520 <Header search={props.search} />
pages/blog.js+7
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Link from "next/link";
34import Container from "../components/Container";
45import Footer from "../components/Footer";
@@ -10,10 +11,16 @@ import { getAllPosts, formatDate } from "../lib/lib";
1011import { contact } from "../lib/constants";
1112
1213export default function Blog({ posts, search }) {
14+ const post = {
15+ title: "Blog",
16+ description:
17+ "Stories from the broader Urbit community, the Urbit Foundation, and the many people contributing to Urbit.",
18+ };
1319 return (
1420 <Container>
1521 <Head>
1622 <title>Blog • urbit.org</title>
23+ {Meta(post)}
1724 </Head>
1825 <SingleColumn>
1926 <Header search={search} />
pages/blog/[slug].js+2−3
@@ -7,18 +7,16 @@ import {
77 formatDate,
88} from "../../lib/lib";
99import Head from "next/head";
10−import Link from "next/link";
10+import Meta from "../../components/Meta";
1111import ErrorPage from "../404";
1212import Container from "../../components/Container";
1313import Markdown from "../../components/Markdown";
1414import Header from "../../components/Header";
1515import Footer from "../../components/Footer";
16−import BackgroundImage from "../../components/BackgroundImage";
1716import SingleColumn from "../../components/SingleColumn";
1817import Section from "../../components/Section";
1918import Contact from "../../components/Contact";
2019import PostPreview from "../../components/PostPreview";
21−import { name, contact } from "../../lib/constants";
2220import markdownStyles from "../../styles/markdown.module.css";
2321import { decode } from "html-entities";
2422
@@ -37,6 +35,7 @@ export default function Post({
3735 <Container>
3836 <Head>
3937 <title>{post.title} • Blog • urbit.org</title>
38+ {Meta(post)}
4039 </Head>
4140 <SingleColumn>
4241 <Header search={search} />
pages/community/[[...slug]].js+2
@@ -5,6 +5,7 @@ import { useState } from "react";
55import classnames from "classnames";
66import { join } from "path";
77import { getDocs, formatDate, buildPageTree, getPage } from "../../lib/lib";
8+import Meta from "../../components/Meta";
89import Markdown from "../../components/Markdown";
910import ContentArea from "../../components/ContentArea";
1011import Sidebar from "../../components/Sidebar";
@@ -64,6 +65,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
6465 <>
6566 <Head>
6667 <title>{data.title} • Community • urbit.org</title>
68+ {Meta(data)}
6769 </Head>
6870 <div className="flex w-screen h-screen min-h-screen w-screen">
6971 <Sidebar search={search}>
pages/docs/[[...slug]].js+2
@@ -10,6 +10,7 @@ import {
1010 buildPageTree,
1111 getPage,
1212} from "../../lib/lib";
13+import Meta from "../../components/Meta";
1314import Pagination from "../../components/Pagination";
1415import Markdown from "../../components/Markdown";
1516import ContentArea from "../../components/ContentArea";
@@ -123,6 +124,7 @@ export default function DocsLayout({
123124 <>
124125 <Head>
125126 <title>{data.title} • Documentation • urbit.org</title>
127+ {Meta(data)}
126128 </Head>
127129 <div className="flex w-screen h-screen min-h-screen w-screen">
128130 <Sidebar search={search}>
pages/events.js+6−3
@@ -1,13 +1,11 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Link from "next/link";
3−import { useState } from "react";
44import Container from "../components/Container";
55import Footer from "../components/Footer";
66import Header from "../components/Header";
7−import Search from "../components/Search";
87import SingleColumn from "../components/SingleColumn";
98import Section from "../components/Section";
10−import BackgroundImage from "../components/BackgroundImage";
119import { getAllPosts, formatDate } from "../lib/lib";
1210import { contact } from "../lib/constants";
1311
@@ -67,10 +65,15 @@ export function EventCard({ event, dir, className }) {
6765}
6866
6967export default function Events({ pastEvents, comingSoon, search }) {
68+ const post = {
69+ title: "Events",
70+ description: "In-person, remote, and recorded events about Urbit.",
71+ };
7072 return (
7173 <Container>
7274 <Head>
7375 <title>Events • urbit.org</title>
76+ {Meta(post)}
7477 </Head>
7578 <SingleColumn>
7679 <Header search={search} />
pages/events/[slug].js+2−4
@@ -7,18 +7,15 @@ import {
77 formatDate,
88} from "../../lib/lib";
99import Head from "next/head";
10−import Link from "next/link";
11−import ErrorPage from "../404";
10+import Meta from "../../components/Meta";
1211import Container from "../../components/Container";
1312import Markdown from "../../components/Markdown";
1413import Header from "../../components/Header";
1514import Footer from "../../components/Footer";
16−import BackgroundImage from "../../components/BackgroundImage";
1715import SingleColumn from "../../components/SingleColumn";
1816import Contact from "../../components/Contact";
1917import EventPreview from "../../components/EventPreview";
2018import Section from "../../components/Section";
21−import { name, contact } from "../../lib/constants";
2219import markdownStyles from "../../styles/markdown.module.css";
2320import { decode } from "html-entities";
2421
@@ -33,6 +30,7 @@ export default function Event({
3330 <Container>
3431 <Head>
3532 <title>{post.title} • Events • urbit.org</title>
33+ {Meta(post)}
3634 </Head>
3735 <SingleColumn>
3836 <Header search={search} />
pages/getting-started/[[...slug]].js+3−2
@@ -1,10 +1,10 @@
11import Head from "next/head";
2+import Meta from "../../components/Meta";
23import Link from "next/link";
34import { useRouter } from "next/router";
4−import { useState } from "react";
55import classnames from "classnames";
66import { join } from "path";
7−import { getDocs, formatDate, buildPageTree, getPage } from "../../lib/lib";
7+import { buildPageTree, getPage } from "../../lib/lib";
88import Markdown from "../../components/Markdown";
99import ContentArea from "../../components/ContentArea";
1010import Sidebar from "../../components/Sidebar";
@@ -73,6 +73,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
7373 <>
7474 <Head>
7575 <title>{data.title} • Getting Started • urbit.org</title>
76+ {Meta(data)}
7677 </Head>
7778 <div className="flex w-screen h-screen min-h-screen w-screen">
7879 <Sidebar search={search}>
pages/grants.js+6−4
@@ -1,20 +1,17 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Link from "next/link";
34import { useState } from "react";
45import classnames from "classnames";
56import Container from "../components/Container";
67import Footer from "../components/Footer";
78import Header from "../components/Header";
8−import Search from "../components/Search";
99import SingleColumn from "../components/SingleColumn";
10−import BackgroundImage from "../components/BackgroundImage";
11−import TabCarousel from "../components/TabCarousel";
1210import Section from "../components/Section";
1311import PostPreview from "../components/PostPreview";
1412import GrantPreview from "../components/GrantPreview";
1513import {
1614 getAllPosts,
17− formatDate,
1815 getGrantsCategories,
1916 getGrantsTypes,
2017 getPostBySlug,
@@ -74,6 +71,10 @@ export default function Grants({
7471 const [activeTypes, setTypes] = useState(types);
7572 const [includeCompleted, setIncludeCompleted] = useState(false);
7673 const [tab, setTab] = useState(0);
74+ const post = {
75+ title: "Grants",
76+ description: "Contribute to the Urbit project while earning address space.",
77+ };
7778
7879 const postsByCompletion = posts.filter((post) => {
7980 return includeCompleted
@@ -112,6 +113,7 @@ export default function Grants({
112113 <Container>
113114 <Head>
114115 <title>Grants • urbit.org</title>
116+ {Meta(post)}
115117 </Head>
116118 <SingleColumn>
117119 <Header search={search} />
pages/grants/[slug].js+2−3
@@ -6,7 +6,7 @@ import {
66 getSimilarGrants,
77} from "../../lib/lib";
88import Head from "next/head";
9−import Link from "next/link";
9+import Meta from "../../components/Meta";
1010import { decode } from "html-entities";
1111import classnames from "classnames";
1212import ErrorPage from "../404";
@@ -14,11 +14,9 @@ import Container from "../../components/Container";
1414import Markdown from "../../components/Markdown";
1515import Header from "../../components/Header";
1616import Footer from "../../components/Footer";
17−import BackgroundImage from "../../components/BackgroundImage";
1817import SingleColumn from "../../components/SingleColumn";
1918import GrantPreview from "../../components/GrantPreview";
2019import Section from "../../components/Section";
21−import { name, contact } from "../../lib/constants";
2220import markdownStyles from "../../styles/markdown.module.css";
2321
2422export default function Grant({ post, markdown, search, similarGrants }) {
@@ -33,6 +31,7 @@ export default function Grant({ post, markdown, search, similarGrants }) {
3331 <Container>
3432 <Head>
3533 <title>{post.title} • Grants • urbit.org</title>
34+ {Meta(post)}
3635 </Head>
3736 <SingleColumn>
3837 <Header search={search} />
pages/index.js+2
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Link from "next/link";
34import React, { useState, useEffect } from "react";
45import Container from "../components/Container";
@@ -51,6 +52,7 @@ export default function Home({ posts, events, openGrantsCount, search }) {
5152 <Container>
5253 <Head>
5354 <title>urbit.org</title>
55+ {Meta()}
5456 </Head>
5557 <SingleColumn>
5658 <Header search={search} />
pages/media.js+7
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Container from "../components/Container";
34import Footer from "../components/Footer";
45import Header from "../components/Header";
@@ -8,10 +9,16 @@ import Section from "../components/Section";
89import { getAllPosts } from "../lib/lib";
910
1011export default function Media({ posts, search }) {
12+ const post = {
13+ title: "Media",
14+ description:
15+ "A selection of external appearances by the Tlon Corporation and the Urbit Foundation.",
16+ };
1117 return (
1218 <Container>
1319 <Head>
1420 <title>Media • urbit.org</title>
21+ {Meta(post)}
1522 </Head>
1623 <SingleColumn>
1724 <Header search={search} />
pages/media/[slug].js+3−9
@@ -1,12 +1,7 @@
11import { useRouter } from "next/router";
2−import {
3− getPostBySlug,
4− getAllPosts,
5− getNextPost,
6− getPreviousPost,
7− formatDate,
8−} from "../../lib/lib";
2+import { getPostBySlug, getAllPosts, formatDate } from "../../lib/lib";
93import Head from "next/head";
4+import Meta from "../../components/Meta";
105import ErrorPage from "../404";
116import Container from "../../components/Container";
127import Markdown from "../../components/Markdown";
@@ -14,9 +9,7 @@ import Header from "../../components/Header";
149import Footer from "../../components/Footer";
1510import SingleColumn from "../../components/SingleColumn";
1611import Contact from "../../components/Contact";
17−import PostPreview from "../../components/PostPreview";
1812import Section from "../../components/Section";
19−import { contact } from "../../lib/constants";
2013import markdownStyles from "../../styles/markdown.module.css";
2114import { decode } from "html-entities";
2215
@@ -29,6 +22,7 @@ export default function MediaPage({ post, markdown, search }) {
2922 <Container>
3023 <Head>
3124 <title>{post.title} • Media • urbit.org</title>
25+ {Meta(post)}
3226 </Head>
3327 <SingleColumn>
3428 <Header search={search} />
pages/understanding-urbit/[[...slug]].js+2
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../../components/Meta";
23import Link from "next/link";
34import { useRouter } from "next/router";
45import classnames from "classnames";
@@ -69,6 +70,7 @@ export default function UnderstandingLayout({
6970 <>
7071 <Head>
7172 <title>{data.title} • Understanding Urbit • urbit.org</title>
73+ {Meta(data)}
7274 </Head>
7375 <div className="flex w-screen h-screen min-h-screen w-screen">
7476 <Sidebar search={search}>
pages/updates.js+7−8
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../components/Meta";
23import Link from "next/link";
34import Container from "../components/Container";
45import Footer from "../components/Footer";
@@ -10,24 +11,22 @@ import { getAllPosts, formatDate } from "../lib/lib";
1011import { contact } from "../lib/constants";
1112
1213export default function Blog({ posts, search }) {
14+ const post = {
15+ title: "Updates",
16+ description: "Missives from the Urbit Foundation.",
17+ };
1318 return (
1419 <Container>
1520 <Head>
1621 <title>Updates • urbit.org</title>
22+ {Meta(post)}
1723 </Head>
1824 <SingleColumn>
1925 <Header search={search} />
2026 <Section narrow>
2127 <div className="measure">
2228 <h1 className="pb-16">Updates</h1>
23− <p className="pb-6">
24− Stories from the broader Urbit community, the Urbit Foundation,
25− and the many people contributing to Urbit.
26− </p>
27− <p>
28− <a href={contact.newsletter}>Subscribe</a> to the Urbit Newsletter
29− for regular updates, including new blog posts and events.
30− </p>
29+ <p className="pb-6">Missives from the Urbit Foundation.</p>
3130 </div>
3231 </Section>
3332 <Section narrow>
pages/updates/[slug].js+2−4
@@ -7,18 +7,15 @@ import {
77 formatDate,
88} from "../../lib/lib";
99import Head from "next/head";
10−import Link from "next/link";
10+import Meta from "../../components/Meta";
1111import ErrorPage from "../404";
1212import Container from "../../components/Container";
1313import Markdown from "../../components/Markdown";
1414import Header from "../../components/Header";
1515import Footer from "../../components/Footer";
16−import BackgroundImage from "../../components/BackgroundImage";
1716import SingleColumn from "../../components/SingleColumn";
1817import Section from "../../components/Section";
1918import Contact from "../../components/Contact";
20−import PostPreview from "../../components/PostPreview";
21−import { name, contact } from "../../lib/constants";
2219import markdownStyles from "../../styles/markdown.module.css";
2320import { decode } from "html-entities";
2421
@@ -37,6 +34,7 @@ export default function Post({
3734 <Container>
3835 <Head>
3936 <title>{post.title} • Updates • urbit.org</title>
37+ {Meta(post)}
4038 </Head>
4139 <SingleColumn>
4240 <Header search={search} />
pages/using/[[...slug]].js+2
@@ -1,4 +1,5 @@
11import Head from "next/head";
2+import Meta from "../../components/Meta";
23import Link from "next/link";
34import { useRouter } from "next/router";
45import { useState } from "react";
@@ -101,6 +102,7 @@ export default function UsingLayout({ posts, data, params, search, markdown }) {
101102 <>
102103 <Head>
103104 <title>{data.title} • Operator's Manual • urbit.org</title>
105+ {Meta(data)}
104106 </Head>
105107 <div className="flex w-screen h-screen min-h-screen w-screen">
106108 <Sidebar search={search}>