on master help sign in
newsletter signup
commit1ed95adcdd0045848a299431afc69709fdcf5fa3 authorGavin Atkinson <gvnatknsn@protonmail.com> dateMon 14 Jun 2021, 16:23 (5 years ago) parent2cf3a44
13 files changed+93−44
components/BackgroundImage.js+6 components/Container.js+2−3 components/Footer.js+4−3 components/Markdown.js+1 components/SingleColumn.js+1 components/TabCarousel.js+9 lib/constants.js+5−1 lib/lib.js+5−5 package-lock.json+8−3 package.json+1 pages/blog.js−5 pages/index.js+44−24 styles/globals.css+7
components/BackgroundImage.jsnew file+6
@@ -0,0 +1,6 @@
1+// Easily crops images
2+export default function BackgroundImage(props) {
3+ return (
4+ <div className={`bg-img`} style={{backgroundImage: `url(${props.src})`}}/>
5+ )
6+}
components/Container.js+2−3
@@ -1,9 +1,8 @@
1+// Ensures the root container is always 100vw, min 100vh, and centers all children along the y-axis
12export default function Container({children}) {
23 return (
3− <div className='flex min-h-screen w-screen justify-center'>
4− <div className='flex flex-col w-full items-center'>
4+ <div className='flex flex-col min-h-screen w-screen items-center'>
55 {children}
6− </div>
76 </div>
87 )
98 }
components/Footer.js+4−3
@@ -1,8 +1,9 @@
1+import Link from 'next/link'
2+
13export default function Footer() {
24 return (
3− <footer className="pt-12 bg-yellow h-80 w-full">
5+ <footer className="pt-12 bg-wall h-80 w-full mt-48">
46
5− </footer>
6−
7+ </footer>
78 )
89}
components/Markdown.js+1
@@ -28,6 +28,7 @@ const options = {
2828 }
2929}
3030
31+// Converts markdown strings into markdown HTML/React components
3132export default function Markdown({ post }) {
3233 return (
3334 <div className={markdownStyles['markdown']}>
components/SingleColumn.js+1
@@ -1,3 +1,4 @@
1+// Provides a limited-width column with all children center-aligned along the vertical axis
12export default function SingleColumn({children}) {
23 return (
34 <div className='flex flex-col w-full items-center max-w-screen-xl'>
components/TabCarousel.jsnew file+9
@@ -0,0 +1,9 @@
1+// Given multiple children, returns only 1 to be rendered based on props.index
2+export default function TabCarousel(props) {
3+ if (props.children) {
4+ if (props.children[props.index]) {
5+ return props.children[props.index]
6+ }
7+ }
8+ return null
9+}
lib/constants.js+5−1
@@ -1,4 +1,8 @@
1−module.exports = {
1+export const contact = {
22 name: "Urbit",
33 email: "support@urbit.org",
4+ twitter: "https://twitter.com/urbit",
5+ github: "https://github.com/urbit/urbit",
6+ discord: "https://discord.gg/Mae2bk7",
7+ urbitCommunity: "~bitbet-bolbel/urbit-community",
48}
lib/lib.js+5−5
@@ -94,11 +94,11 @@ export function getPreviousPost(slug, fields = [], key) {
9494 return resultPost
9595}
9696
97−// export function dateFormat(d) {
98−// const wk = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
99−// const mn =["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
100−// return wk[d.getDay()] + ", " + mn[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear()
101−// }
97+export function formatDate(d) {
98+ // const wk = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
99+ const mn =["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
100+ return mn[d.getMonth()] + " " + d.getDate() + ", " + d.getFullYear()
101+}
102102
103103// export function capitalize(str) {
104104// return str.charAt(0).toUpperCase() + str.slice(1);
package-lock.json+8−3
@@ -134,6 +134,11 @@
134134 "supports-color": "^7.1.0"
135135 }
136136 },
137+ "classnames": {
138+ "version": "2.2.6",
139+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
140+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
141+ },
137142 "color-convert": {
138143 "version": "2.0.1",
139144 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -578,9 +583,9 @@
578583 }
579584 },
580585 "classnames": {
581− "version": "2.2.6",
582− "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
583− "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
586+ "version": "2.3.1",
587+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz",
588+ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA=="
584589 },
585590 "color": {
586591 "version": "3.1.3",
package.json+1
@@ -9,6 +9,7 @@
99 },
1010 "dependencies": {
1111 "@iarna/toml": "^2.2.5",
12+ "classnames": "^2.3.1",
1213 "gray-matter": "^4.0.3",
1314 "next": "10.2.3",
1415 "react": "17.0.2",
pages/blog.js−5
@@ -7,11 +7,6 @@ import Header from '../components/Header'
77import SingleColumn from '../components/SingleColumn'
88import { getAllPosts } from '../lib/lib'
99
10−function BackgroundImage(props) {
11− return (
12− <div className={`bg-img`} style={{backgroundImage: `url(${props.src})`}}/>
13− )
14−}
1510
1611export default function BlogPost({ posts }) {
1712
pages/index.js+44−24
@@ -5,22 +5,10 @@ import Container from '../components/Container'
55import SingleColumn from '../components/SingleColumn'
66import Header from '../components/Header'
77import Footer from '../components/Footer'
8−import { getAllPosts } from '../lib/lib'
9−
10−function TabCarousel(props) {
11− if (props.children) {
12− if (props.children[props.index]) {
13− return props.children[props.index]
14− }
15− }
16− return null
17−}
18−
19−function BackgroundImage(props) {
20− return (
21− <div className={`bg-img`} style={{backgroundImage: `url(${props.src})`}}/>
22− )
23−}
8+import BackgroundImage from '../components/BackgroundImage'
9+import TabCarousel from '../components/TabCarousel'
10+import { getAllPosts, formatDate } from '../lib/lib'
11+import { contact } from '../lib/constants'
2412
2513export default function Home({ posts, events }) {
2614
@@ -124,7 +112,7 @@ export default function Home({ posts, events }) {
124112 <BackgroundImage src={post.extra.image || ''} />
125113 <p className='text-black type-h3 mt-2'>{post.title}</p>
126114 <caption className='text-black mt-2'>{post.extra.author}</caption>
127− <caption className='text-gray mt-2'>{post.date}</caption>
115+ <caption className='text-gray mt-2'>{formatDate(new Date(post.date))}</caption>
128116 </div>
129117 </Link>
130118 </div>
@@ -144,7 +132,7 @@ export default function Home({ posts, events }) {
144132 <div>
145133 <BackgroundImage src={event.extra.image || ''} />
146134 <p className='text-black mt-2'>{event.title || ''}</p>
147− <caption className='text-gray'>{event.date}</caption>
135+ <caption className='text-gray'>{formatDate(new Date(event.date))}</caption>
148136 </div>
149137 </Link>
150138 </div>
@@ -153,19 +141,51 @@ export default function Home({ posts, events }) {
153141 }
154142 </div>
155143 </TabCarousel>
156−
157−
158144 </section>
159145
160146 <section className="layout-narrow pt-48">
161− <div className='measure pb-12'>
162− <h2 className="m-0 p-0 mr-4 pb-12">Inside the OS</h2>
163− <p>We send monthly emails on system improvements, upcoming events, and community spotlights.</p>
147+ <div className='measure'>
148+ <h2 className="m-0 p-0 mr-4 pb-12">Stay In Touch</h2>
149+ <p className='pb-12'>We send monthly emails on system improvements, upcoming events, and community spotlights.</p>
164150 </div>
151+ <form
152+ action="https://urbit.us11.list-manage.com/subscribe/post?u=972a03db9e0c6c25bb58de8c8&amp;amp;id=be143888d2"
153+ method="post" id="mc-embedded-subscribe-form"
154+ name="mc-embedded-subscribe-form"
155+ className="validate form"
156+ target="_blank"
157+ novalidate>
158+ <div className="input-group" id="mc_embed_signup_scroll">
159+ <div className="mc-field-group w-full relative">
160+ <input
161+ className="text-gray type-ui black border-green border-4 px-3 w-full mb-2 h-16 rounded-xl"
162+ type="email"
163+ name="EMAIL"
164+ id="mce-EMAIL"
165+ placeholder="your@email.com" />
166+ <div className="flex h-16 items-center justify-center absolute top-0 right-6">
167+ <button
168+ id="mc-embedded-subscribe"
169+ className="type-ui text-gray bg-transparent"
170+ type="submit"
171+ name="subscribe"
172+ onclick="_paq.push(['trackEvent', 'Mailing List', 'Subscribe'])">
173+ Sign Up
174+ </button>
175+ </div>
176+ </div>
177+ </div>
178+ </form>
179+ <h3 className="mt-8">Follow us on <a className="text-green" href={contact.twitter}>Twitter</a></h3>
180+ <h3 className="mt-8">Explore code on <a className="text-green" href={contact.github}>Github</a></h3>
181+ <h3 className="mt-8">Ask questions in our <a className="text-green" href={contact.discord}>Discord</a></h3>
182+ <h3 className="mt-8">Boot Urbit and join <code className="bg-wall p-2 rounded-lg">{contact.urbitCommunity}</code></h3>
183+
165184 </section>
185+
166186 </SingleColumn>
167187
168− <Footer />
188+ <Footer/>
169189
170190 </Container>
171191 )
styles/globals.css+7
@@ -2,6 +2,9 @@
22 font-size:16px;
33} */
44
5+@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro:wght@400;500;600;700&display=swap');
6+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Source+Code+Pro:wght@400;500;600;700&display=swap');
7+
58html,
69body {
710 padding: 0;
@@ -54,6 +57,10 @@ h3, .type-h3 {
5457 @apply text-base font-sans font-medium block text-left;
5558 }
5659
60+ code .type-code {
61+ @apply bg-wall p-4 font-mono;
62+ }
63+
5764 .button-sm {
5865 @apply flex px-4 py-1 rounded text-white type-ui;
5966 border:none;