Skip to content

Commit a463ded

Browse files
committed
feat: whiteboard
1 parent 7c8515a commit a463ded

File tree

9 files changed

+364
-11
lines changed

9 files changed

+364
-11
lines changed

public/apps/apps.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,14 @@
165165
"icon": "QuestionIcon",
166166
"created_at": "2025-11-18T03:48:58+03:00"
167167
},
168+
{
169+
"slug": "whiteboard",
170+
"to": "/apps/whiteboard",
171+
"title": "Whiteboard",
172+
"description": "A simple digital whiteboard for sketching and doodling.",
173+
"icon": "PencilSimpleIcon",
174+
"created_at": "2025-11-25T17:00:00+03:00"
175+
},
168176
{
169177
"slug": "banana-converter",
170178
"to": "/apps/banana-converter",

src/components/AnimatedRoutes.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ import BananaConverterPage from '../pages/apps/BananaConverterPage';
6666
import PirateTranslatorPage from '../pages/apps/PirateTranslatorPage';
6767
import GalacticAgePage from '../pages/apps/GalacticAgePage';
6868
import BpmGuesserPage from '../pages/apps/BpmGuesserPage';
69+
import WhiteboardPage from '../pages/apps/WhiteboardPage';
6970
import SettingsPage from '../pages/SettingsPage';
7071

7172
import UsefulLinksPage from '../pages/UsefulLinksPage';
@@ -599,6 +600,10 @@ function AnimatedRoutes() {
599600
path="/apps::bpm"
600601
element={<Navigate to="/apps/bpm-guesser" replace />}
601602
/>
603+
<Route
604+
path="/apps::draw"
605+
element={<Navigate to="/apps/whiteboard" replace />}
606+
/>
602607
{/* End of hardcoded redirects */}
603608
<Route
604609
path="/apps/ip"
@@ -1273,6 +1278,20 @@ function AnimatedRoutes() {
12731278
</motion.div>
12741279
}
12751280
/>
1281+
<Route
1282+
path="/apps/whiteboard"
1283+
element={
1284+
<motion.div
1285+
initial="initial"
1286+
animate="in"
1287+
exit="out"
1288+
variants={pageVariants}
1289+
transition={pageTransition}
1290+
>
1291+
<WhiteboardPage />
1292+
</motion.div>
1293+
}
1294+
/>
12761295
{/* D&D specific 404 page */}
12771296
<Route
12781297
path="/stories/*"

src/pages/apps/CronJobGeneratorPage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState, useCallback, useEffect } from 'react';
22
import { Link } from 'react-router-dom';
3-
import { ArrowLeftIcon, CopySimple } from '@phosphor-icons/react';
3+
import { ArrowLeftIcon, CopySimpleIcon } from '@phosphor-icons/react';
44
import useSeo from '../../hooks/useSeo';
55
import CustomDropdown from '../../components/CustomDropdown';
66

@@ -262,7 +262,7 @@ const CronJobGeneratorPage = () => {
262262
onClick={() => copyToClipboard(generatedCron)}
263263
className="p-2 rounded-full hover:bg-gray-700"
264264
>
265-
<CopySimple size={20} className="text-gray-400" />
265+
<CopySimpleIcon size={20} className="text-gray-400" />
266266
</button>
267267
</div>
268268
<p className="text-sm text-gray-400 mt-2">

src/pages/apps/ExcuseGeneratorPage.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState } from 'react';
22
import { Link } from 'react-router-dom';
3-
import { ArrowLeftIcon, CopySimple, DiceFive } from '@phosphor-icons/react';
3+
import { ArrowLeftIcon, CopySimpleIcon, DiceFiveIcon } from '@phosphor-icons/react';
44
import useSeo from '../../hooks/useSeo';
55
import CustomDropdown from '../../components/CustomDropdown';
66

@@ -213,13 +213,13 @@ const ExcuseGeneratorPage = () => {
213213
onClick={generateExcuse}
214214
className={`${buttonStyle} flex items-center gap-2`}
215215
>
216-
<DiceFive size={24} /> Generate Excuse
216+
<DiceFiveIcon size={24} /> Generate Excuse
217217
</button>
218218
<button
219219
onClick={copyToClipboard}
220220
className={`${buttonStyle} flex items-center gap-2`}
221221
>
222-
<CopySimple size={24} /> Copy
222+
<CopySimpleIcon size={24} /> Copy
223223
</button>
224224
</div>
225225
</div>

src/pages/apps/JsonFormatterPage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState, useCallback } from 'react';
22
import { Link } from 'react-router-dom';
3-
import { ArrowLeftIcon, CopySimple } from '@phosphor-icons/react';
3+
import { ArrowLeftIcon, CopySimpleIcon } from '@phosphor-icons/react';
44
import colors from '../../config/colors';
55
import { useToast } from '../../hooks/useToast';
66
import useSeo from '../../hooks/useSeo';
@@ -250,7 +250,7 @@ const JsonFormatterPage = () => {
250250
}}
251251
title="Copy to Clipboard"
252252
>
253-
<CopySimple size={20} />
253+
<CopySimpleIcon size={20} />
254254
</button>
255255
</div>
256256
</div>

src/pages/apps/PasswordGeneratorPage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useState, useCallback } from 'react';
22
import { Link } from 'react-router-dom';
3-
import { ArrowLeftIcon, CopySimple } from '@phosphor-icons/react';
3+
import { ArrowLeftIcon, CopySimpleIcon } from '@phosphor-icons/react';
44
import colors from '../../config/colors';
55
import { useToast } from '../../hooks/useToast';
66
import useSeo from '../../hooks/useSeo';
@@ -173,7 +173,7 @@ const PasswordGeneratorPage = () => {
173173
}}
174174
title="Copy to Clipboard"
175175
>
176-
<CopySimple size={20} />
176+
<CopySimpleIcon size={20} />
177177
</button>
178178
</div>
179179
</div>

src/pages/apps/PirateTranslatorPage.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, {useState} from 'react';
22
import {Link} from 'react-router-dom';
3-
import {ArrowLeftIcon, SkullIcon, CopySimple} from '@phosphor-icons/react';
3+
import {ArrowLeftIcon, SkullIcon, CopySimpleIcon} from '@phosphor-icons/react';
44
import colors from '../../config/colors';
55
import useSeo from '../../hooks/useSeo';
66
import {useToast} from '../../hooks/useToast';
@@ -195,7 +195,7 @@ const PirateTranslatorPage = () => {
195195
!translatedText ? 'opacity-50 cursor-not-allowed' : ''
196196
}`}
197197
>
198-
<CopySimple size={24} className="inline-block mr-2"/> Copy
198+
<CopySimpleIcon size={24} className="inline-block mr-2"/> Copy
199199
</button>
200200
</div>
201201
</div>

0 commit comments

Comments
 (0)