Skip to content

Commit 2aaa454

Browse files
committed
Update landing page links and features
1 parent 200dc1f commit 2aaa454

6 files changed

Lines changed: 54 additions & 111 deletions

File tree

‎package.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"scripts": {
77
"dev": "rm -rf .parcel-cache && parcel ./index.html --public-url http://localhost:1234/",
88
"build": "rm -rf ./dist && parcel build ./index.html --public-url $PUBLIC_URL && mkdir -p ./dist/public && cp -rf ./public/* ./dist/public",
9+
"test:landing-web-app": "rm -rf .parcel-cache && PUBLIC_URL=/ npm run build && node --test test/landing-web-app.test.mjs",
910
"dev:cloudflare": "wrangler2 dev"
1011
},
1112
"devDependencies": {

‎src/pages/Landing/HeadShowcase.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,9 @@ export function HeadShowcase () {
198198
leftIcon={<Play size={18} weight={'duotone'}/>}
199199
rightIcon={<ArrowSquareOut size={18} className={'opacity-70'}/>}
200200
className={'bg-logseq-600'}
201-
href={"https://demo.logseq.com"}
201+
href={"https://app.logseq.com"}
202202
>
203-
Live Demo
203+
Web app
204204
</Button>
205205
</div>
206206
</div>

‎src/pages/Landing/LandingFooterNav.tsx‎

Lines changed: 5 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {
22
ArrowSquareOut, CloudCheck, DeviceMobile, FileText,
33
GithubLogo, Globe, HandWaving, Keyhole, Play,
4-
PuzzlePiece, ScribbleLoop, Swatches, TwitterLogo, UserCirclePlus
4+
PuzzlePiece, Swatches, TwitterLogo, UserCirclePlus
55
} from '@phosphor-icons/react'
66
import { Button } from '../../components/Buttons'
77
import { AppLogoEmbossed, FloatGlassButton, imageProductHuntLogo } from './common'
@@ -50,61 +50,11 @@ export function FeaturesBoards () {
5050
<div className="r img-wrap flex-1 hidden sm:block"></div>
5151
</div>
5252
</div>
53-
54-
<div className="board-item hidden sm:block">
55-
<div className="inner whiteboard">
56-
<div className="l img-wrap flex-1 hidden sm:flex"></div>
57-
58-
<div className="r info-wrap flex-1">
59-
<strong><ScribbleLoop size={38} weight={'duotone'}/></strong>
60-
<h1>Whiteboards <sup>BETA</sup></h1>
61-
62-
<h2>
63-
<span>A new canvas</span> <br/>
64-
<span className="text-logseq-50/80">for your thoughts.</span>
65-
</h2>
66-
67-
<h3 className="hidden sm:block">
68-
<span className="text-logseq-50/80">Place any of your thoughts from the knowledge base <br/>
69-
or new ones next to each other on an infinite canvas</span> <br/>
70-
<span>to connect, associate and understand in new ways.</span>
71-
</h3>
72-
</div>
73-
74-
</div>
75-
</div>
7653
</div>
7754
)
7855
}
7956

8057
export function FeaturesBoardsDL () {
81-
const appState = useAppState()
82-
83-
const itemWhiteboard = (
84-
<div className="board-item whiteboard flex-1">
85-
<div className="inner">
86-
<div className="r info-wrap flex-1">
87-
<strong><ScribbleLoop size={38} weight={'duotone'}/></strong>
88-
<h1>Whiteboards <sup>BETA</sup></h1>
89-
90-
{appState.sm.get() ?
91-
(
92-
<h2>
93-
<span>A new canvas </span> <br/>
94-
<span className="text-logseq-50/80">for your thoughts.</span>
95-
</h2>
96-
) : (
97-
<h2>
98-
<span>A new canvas </span>
99-
<span className="text-logseq-50/80">for your<br/>thoughts.</span>
100-
</h2>
101-
)}
102-
</div>
103-
104-
</div>
105-
</div>
106-
)
107-
10858
return (
10959
<div className={'app-features-boards dl-page hidden sm:block'}>
11060
<div className="board-item-wrap">
@@ -122,13 +72,11 @@ export function FeaturesBoardsDL () {
12272
</div>
12373
</div>
12474

125-
{appState.sm.get() && (itemWhiteboard)}
126-
12775
<div className="board-item rtc-collaboration">
12876
<div className="inner">
12977
<div className="l info-wrap flex-1">
13078
<strong><UserCirclePlus size={38} weight={'duotone'}/></strong>
131-
<h1>Real-time collaboration<sup> COMING SOON</sup></h1>
79+
<h1>Real-time collaboration</h1>
13280
<h2>
13381
<span className="text-logseq-50/80">
13482
Great knowledge is
@@ -141,12 +89,6 @@ export function FeaturesBoardsDL () {
14189
</div>
14290
</div>
14391
</div>
144-
145-
{!appState.sm.get() && (
146-
<div className="board-item-wrap flex w-full">
147-
{itemWhiteboard}
148-
</div>
149-
)}
15092
</div>
15193
)
15294
}
@@ -271,9 +213,9 @@ export function LandingFooterDesc (props: {
271213
leftIcon={<Play size={18} weight={'duotone'}/>}
272214
rightIcon={<ArrowSquareOut size={18} className={'opacity-70'}/>}
273215
className={'w-full bg-logseq-600 mt-4 sm:w-auto sm:mt-0'}
274-
href={'https://demo.logseq.com'}
216+
href={'https://app.logseq.com'}
275217
>
276-
Live Demo
218+
Web app
277219
</Button>
278220
</div>
279221
</div>
@@ -287,6 +229,7 @@ export function LandingFooterNav () {
287229
const links = (
288230
<div className="links flex flex-col justify-center">
289231
<p className="flex space-x-4 text-xs text-gray-300/90 pb-1">
232+
<a href="https://logseq.io/p/NX4mc_ggEV" target="_blank" rel="noreferrer">Roadmap</a>
290233
<Link to={"/privacy-policy"}>Privacy</Link>
291234
<Link to={"/terms"}>Terms</Link>
292235
<a href="mailto:hi@logseq.com">Contact Us</a>

‎src/pages/Landing/TutorialShowcase.tsx‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -393,11 +393,6 @@ export function TutorialShowcase (
393393
<li>Task Management</li>
394394
<li>PDF Annotations</li>
395395
<li>Flashcards</li>
396-
<li>
397-
<span className="relative">
398-
Whiteboards<sup>NEW</sup>
399-
</span>
400-
</li>
401396
</ul>
402397

403398
{/* Tutorial Features Slide/Select */}

‎src/pages/Landing/index.css‎

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,23 +1055,6 @@ h1, h2, h3 {
10551055
}
10561056
}
10571057

1058-
&.whiteboard {
1059-
@apply pt-4 pb-5
1060-
sm:pt-10 sm:pb-12;
1061-
1062-
> .img-wrap {
1063-
@apply -mb-12 -ml-16;
1064-
1065-
background-image: url("./assets/whiteboard-demo.png");
1066-
background-position-x: left;
1067-
background-position-y: bottom;
1068-
border-radius: 22px;
1069-
}
1070-
1071-
> .r {
1072-
@apply sm:pl-16;
1073-
}
1074-
}
10751058
}
10761059
}
10771060

@@ -1123,31 +1106,6 @@ h1, h2, h3 {
11231106
}
11241107
}
11251108
}
1126-
1127-
&.whiteboard {
1128-
@apply flex;
1129-
1130-
> .inner {
1131-
@apply pt-4 flex flex-1 pb-20 -mx-4 -mt-4
1132-
sm:pt-10 sm:-mx-8 sm:-mb-2 sm:px-8;
1133-
1134-
border-radius: 1em;
1135-
overflow: hidden;
1136-
background-image: url("./assets/whiteboard-demo-small.png");
1137-
background-repeat: no-repeat;
1138-
background-size: 100%;
1139-
background-position: bottom;
1140-
1141-
@screen sm {
1142-
background-size: contain;
1143-
background-image: url("./assets/whiteboard_canvas_fadeout.png");
1144-
}
1145-
1146-
> .r {
1147-
@apply px-4 py-4 sm:px-0 sm:py-0;
1148-
}
1149-
}
1150-
}
11511109
}
11521110
}
11531111
}

‎test/landing-web-app.test.mjs‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import assert from 'node:assert/strict'
2+
import { readdir, readFile } from 'node:fs/promises'
3+
import { join } from 'node:path'
4+
import { fileURLToPath } from 'node:url'
5+
import test from 'node:test'
6+
7+
async function collectAssets (directory) {
8+
const entries = await readdir(directory, { withFileTypes: true })
9+
const assets = await Promise.all(entries.map(async entry => {
10+
const path = join(directory, entry.name)
11+
12+
if (entry.isDirectory()) return collectAssets(path)
13+
if (/\.(?:html|js)$/.test(entry.name)) return readFile(path, 'utf8')
14+
return []
15+
}))
16+
17+
return assets.flat()
18+
}
19+
20+
test('landing page links to the Logseq web app', async () => {
21+
const assets = await collectAssets(fileURLToPath(new URL('../dist/', import.meta.url)))
22+
const output = assets.join('\n')
23+
24+
assert.match(output, /https:\/\/app\.logseq\.com/)
25+
assert.match(output, /Web app/)
26+
assert.doesNotMatch(output, /https:\/\/demo\.logseq\.com/)
27+
assert.doesNotMatch(output, /Live Demo/)
28+
})
29+
30+
test('landing page omits the Whiteboards feature', async () => {
31+
const assets = await collectAssets(fileURLToPath(new URL('../dist/', import.meta.url)))
32+
const output = assets.join('\n')
33+
34+
assert.doesNotMatch(output, /Whiteboards/)
35+
assert.match(output, /Logseq Sync/)
36+
assert.match(output, /Real-time collaboration/)
37+
assert.doesNotMatch(output, /COMING SOON/)
38+
})
39+
40+
test('landing page links to the public roadmap', async () => {
41+
const assets = await collectAssets(fileURLToPath(new URL('../dist/', import.meta.url)))
42+
const output = assets.join('\n')
43+
44+
assert.match(output, /Roadmap/)
45+
assert.match(output, /https:\/\/logseq\.io\/p\/NX4mc_ggEV/)
46+
})

0 commit comments

Comments
 (0)