feat: social features

This commit is contained in:
Travis Fischer
2021-01-17 18:54:52 -05:00
parent a4084000c8
commit 04fe54e00b
17 changed files with 423 additions and 101 deletions

View File

@@ -1,14 +1,45 @@
/**
* All app config that should be available client-side.
* Site-wide app configuration.
*
* @see env.ts for server-side version.
* @see env.ts for config relating to third-party dependencies.
*/
import { getEnv } from './get-env'
// this is the most important config value which specifies the site's root Notion page
export const rootNotionPageId = '78fc5a4b88d74b0e824e29407e9f1ec1'
// general site config
export const siteName = 'Transitive Bullshit'
export const siteFavicon = '/favicon.png'
export const siteAuthor = 'Travis Fischer'
export const siteDomain = 'transitivebullsh.it'
export const siteDescription =
'Personal site of Travis Fischer aka Transitive Bullshit'
// default notion values for site-wide consistency (may be overridden on a per-page basis)
export const defaultPageIcon =
'https://ssfy.io/https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F797768e4-f24a-4e65-bd4a-b622ae9671dc%252Fprofile-2020-280w-circle.png%3Ftable%3Dblock%26id%3D78fc5a4b-88d7-4b0e-824e-29407e9f1ec1%26cache%3Dv2'
export const defaultPageCover =
'https://ssfy.io/https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F9fc5ecae-2b4b-4e73-b0d4-918c829ba69f%252FIMG_0259-opt.jpg%3Ftable%3Dblock%26id%3D78fc5a4b-88d7-4b0e-824e-29407e9f1ec1%26cache%3Dv2'
export const defaultPageCoverPosition = 0.1862
// ----------------------------------------------------------------------------
export const isDev =
process.env.NODE_ENV === 'development' || !process.env.NODE_ENV
export const port = getEnv('PORT', '3000')
export const host = isDev ? `http://localhost:${port}` : `https://${siteDomain}`
export const apiBaseUrl = `${host}/api`
export const api = {
createPreviewImage: `${apiBaseUrl}/create-preview-image`,
searchNotion: `${apiBaseUrl}/search-notion`,
renderSocialImage: (pageId) => `${apiBaseUrl}/render-social-image/${pageId}`
}
export const fathomId = isDev ? null : getEnv('FATHOM_ID', null)
export const fathomConfig = fathomId
@@ -16,10 +47,3 @@ export const fathomConfig = fathomId
excludedDomains: ['localhost', 'localhost:3000']
}
: undefined
// TODO: fix duplication between server-side env and client-side config
export const apiBaseUrl = `/api`
export const api = {
createPreviewImage: `${apiBaseUrl}/create-preview-image`,
searchNotion: `${apiBaseUrl}/search-notion`
}

View File

@@ -1,23 +1,13 @@
/**
* All app config that needs to be available server-side.
* Config for third-party dependencies.
*
* @see config.ts for client-side version.
* - Google Cloud (Firebase) - used very simple database functionality.
* - Fathom - simple analytics.
*
* @see config.ts for primary configuration.
*/
import { getEnv } from './get-env'
import { isDev } from './config'
export * from './config'
export const port = getEnv('PORT', '3000')
export const domain = getEnv('DOMAIN')
export const host = isDev ? `http://localhost:${port}` : `https://${domain}`
export const apiBaseUrl = `${host}/api`
export const api = {
createPreviewImage: `${apiBaseUrl}/create-preview-image`,
searchNotion: `${apiBaseUrl}/search-notion`
}
export const googleProjectId = getEnv('GCLOUD_PROJECT')
@@ -40,14 +30,3 @@ try {
}
export const firebaseCollectionImages = getEnv('FIREBASE_COLLECTION_IMAGES')
export const notionRootPageId = getEnv('NOTION_ROOT_PAGE_ID')
export const siteName = getEnv('SITE_NAME', 'Transitive Bullshit')
export const siteDesc = getEnv(
'SITE_DESC',
'Personal site of Travis Fischer aka Transitive Bullshit.'
)
export const siteImage = getEnv('SITE_IMAGE', '/social.jpg')
export const siteFavicon = getEnv('SITE_FAVICON', '/favicon.png')
export const siteAuthor = getEnv('SITE_AUTHOR', 'Travis Fischer')

View File

@@ -0,0 +1,20 @@
import * as types from 'lib/types'
export function getPageDescription(
block: types.Block,
recordMap: types.RecordMap
): string | null {
const collection = recordMap.collection[block.parent_id]?.value
if (collection) {
const descriptionKey = Object.keys(collection.schema).find(
(key) => collection.schema[key].name === 'Description'
)
if (descriptionKey) {
return block.properties[descriptionKey]
}
}
return null
}

View File

@@ -1,7 +1,7 @@
import crypto from 'crypto'
import got from 'got'
import { api } from './env'
import { api } from './config'
import * as types from './types'
import * as db from './db'

View File

@@ -1,4 +1,4 @@
import * as config from './env'
import * as config from './config'
import * as types from './types'
export const getSiteForDomain = async (
@@ -7,8 +7,7 @@ export const getSiteForDomain = async (
return {
domain,
name: config.siteName,
rootNotionPageId: config.notionRootPageId,
description: config.siteDesc,
image: config.siteImage
rootNotionPageId: config.rootNotionPageId,
description: config.siteDescription
} as types.Site
}

View File

@@ -1,7 +1,7 @@
import { getSiteForDomain } from './get-site-for-domain'
import * as config from './env'
import * as config from './config'
import * as types from './types'
export async function getSites(): Promise<types.Site[]> {
return [await getSiteForDomain(config.domain)]
return [await getSiteForDomain(config.siteDomain)]
}