chore: updated user nav and added about 09b13728
Steve · 2025-11-04 22:00 2 file(s) · +62 −22
TODO.md +2 −2
13 13
- [x] Collapse both side bars if desired?
14 14
- [x] Update logo in top left
15 15
- [x] Marking Read and Unread
16 -
- [ ] Change Reset to "Log out" or something along those lines
17 -
- [ ] Add About to settings menu?
16 +
- [x] Change Reset to "Log out" or something along those lines
17 +
- [x] Add About to settings menu?
18 18
- [ ] Add Home screen with start button + acknowledgements
19 19
- [ ] Import + Export OPML in settings
src/components/nav-user.tsx +60 −20
6 6
	CreditCard,
7 7
	Eye,
8 8
	EyeOff,
9 +
	Info,
9 10
	LogOut,
10 11
	Sparkles,
12 +
	Trash2,
11 13
	Upload,
12 14
} from "lucide-react";
13 15
import {
20 22
} from "@/components/ui/dialog";
21 23
import { Button } from "@/components/ui/button";
22 24
import { use, useState } from "react";
23 -
import { useEvolu } from "@/lib/evolu";
25 +
import { useEvolu, reset } from "@/lib/evolu";
24 26
25 -
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
26 27
import {
27 28
	DropdownMenu,
28 29
	DropdownMenuContent,
44 45
	const { isMobile } = useSidebar();
45 46
	const [isDialogOpen, setIsDialogOpen] = useState(false);
46 47
	const [isRestoreDialogOpen, setIsRestoreDialogOpen] = useState(false);
48 +
	const [isAboutDialogOpen, setIsAboutDialogOpen] = useState(false);
47 49
	const [backupPhrase, setBackupPhrase] = useState<Mnemonic | null>();
48 50
	const [isRevealed, setIsRevealed] = useState(false);
49 51
	const [isCopied, setIsCopied] = useState(false);
122 124
								sideOffset={4}
123 125
							>
124 126
								<DropdownMenuGroup>
127 +
									<DropdownMenuItem onClick={() => setIsAboutDialogOpen(true)}>
128 +
										<Info />
129 +
										About
130 +
									</DropdownMenuItem>
131 +
								</DropdownMenuGroup>
132 +
								<DropdownMenuSeparator />
133 +
								<DropdownMenuGroup>
125 134
									<DialogTrigger asChild>
126 135
										<DropdownMenuItem>
127 136
											<BookKey />
136 145
									</DropdownMenuItem>
137 146
								</DropdownMenuGroup>
138 147
								<DropdownMenuSeparator />
139 -
								<DropdownMenuGroup>
140 -
									<DropdownMenuItem>
141 -
										<BadgeCheck />
142 -
										Account
143 -
									</DropdownMenuItem>
144 -
									<DropdownMenuItem>
145 -
										<CreditCard />
146 -
										Billing
147 -
									</DropdownMenuItem>
148 -
									<DropdownMenuItem>
149 -
										<Bell />
150 -
										Notifications
151 -
									</DropdownMenuItem>
152 -
								</DropdownMenuGroup>
153 -
								<DropdownMenuSeparator />
154 -
								<DropdownMenuItem>
155 -
									<LogOut />
156 -
									Log out
148 +
								<DropdownMenuItem onClick={reset}>
149 +
									<Trash2 />
150 +
									Clear Data
157 151
								</DropdownMenuItem>
158 152
							</DropdownMenuContent>
159 153
						</DropdownMenu>
231 225
							<Upload className="h-4 w-4 mr-2" />
232 226
							Restore Account
233 227
						</Button>
228 +
					</div>
229 +
				</DialogContent>
230 +
			</Dialog>
231 +
			<Dialog open={isAboutDialogOpen} onOpenChange={setIsAboutDialogOpen}>
232 +
				<DialogContent>
233 +
					<DialogHeader>
234 +
						<DialogTitle>About</DialogTitle>
235 +
					</DialogHeader>
236 +
					<div className="space-y-4">
237 +
						<p className="text-sm text-muted-foreground">
238 +
							Alcove is built on two principles: privacy, and freedom of speech.
239 +
							Those two things are becoming harder to find these days, yet blogs
240 +
							and RSS feeds provides a way out. As long as someone is publishing
241 +
							and someone else is listening, these two fundamentals can help
242 +
							keep free speech alive. Alcove accomplishes privacy through a
243 +
							"can't be evil" tech stack, which you can read more about{" "}
244 +
							<a className="underline" target="_blank" rel="noreferrer" href="">
245 +
								here
246 +
							</a>
247 +
							. TLDR: all of your feeds and posts that you read are encrypted
248 +
							locally and synced via cryptographic keypairs. Even if we wanted
249 +
							to read your stuff, we can't.
250 +
						</p>
251 +
						<p className="text-sm text-muted-foreground">
252 +
							Due to how the encryption works, it is critical that you backup
253 +
							your account passphrase to a secure location like a password
254 +
							manager. If you clear your local browser data there is no way for
255 +
							us to recover your account or feeds, and you will need to make a
256 +
							new one. Back it up now in the settings page!
257 +
						</p>
258 +
						<p className="text-sm text-muted-foreground">
259 +
							Alcove is{" "}
260 +
							<a className="underline" href="" target="_blank" rel="noreferrer">
261 +
								MIT open sourced
262 +
							</a>{" "}
263 +
							and run by{" "}
264 +
							<a
265 +
								className="underline"
266 +
								href="https://stevedylan.dev"
267 +
								target="_blank"
268 +
								rel="noreferrer"
269 +
							>
270 +
								Steve
271 +
							</a>
272 +
							.
273 +
						</p>
234 274
					</div>
235 275
				</DialogContent>
236 276
			</Dialog>