One Calendar is a privacy-first calendar web app built with Next.js. It has modern security features, including e2ee, password-protected sharing, and self-destructing share links ๐Ÿ“… calendar.xyehr.cn
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #140 from EvanTechDev/dev

Push to main

authored by

Evan Huang and committed by
GitHub
5dcc0fc0 32c3ded3

+20 -12
+6
app/(app)/share/[id]/layout.tsx
··· 21 21 22 22 return { 23 23 title: `${eventTitle} | One Calendar`, 24 + icons: { 25 + icon: "/icon.svg", 26 + }, 24 27 } 25 28 } catch (err) { 26 29 console.error("[generateMetadata error]", err) 27 30 return { 28 31 title: "One Calendar", 32 + icons: { 33 + icon: "/icon.svg", 34 + }, 29 35 } 30 36 } 31 37 }
+1
app/globals.css
··· 202 202 203 203 204 204 205 + 205 206 .green, 206 207 .green .app-theme-scope, 207 208 .orange,
+10 -9
components/app/profile/shared-event.tsx
··· 3 3 import { zhCN, enUS } from "date-fns/locale"; 4 4 import { useEffect, useState } from "react"; 5 5 import { useRouter } from "next/navigation"; 6 + import Image from "next/image"; 6 7 import { format } from "date-fns"; 7 8 import { 8 9 MapPin, ··· 310 311 311 312 <div className="relative z-10 flex w-full max-w-sm flex-col gap-6"> 312 313 <a href="/" className="flex items-center gap-2 self-center font-medium"> 313 - <Calendar className="size-4" color="#0066ff" /> 314 - One Calendar 315 - </a> 314 + <Image src="/icon.svg" alt="One Calendar" width={16} height={16} className="size-4" /> 315 + One Calendar 316 + </a> 316 317 317 318 <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }}> 318 319 <Card className="max-w-md w-full overflow-hidden"> ··· 414 415 415 416 <div className="relative z-10 flex w-full max-w-sm flex-col gap-6"> 416 417 <a href="/" className="flex items-center gap-2 self-center font-medium"> 417 - <Calendar className="size-4" color="#0066ff" /> 418 - One Calendar 419 - </a> 418 + <Image src="/icon.svg" alt="One Calendar" width={16} height={16} className="size-4" /> 419 + One Calendar 420 + </a> 420 421 421 422 <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }}> 422 423 <Card className="max-w-md w-full overflow-hidden"> ··· 477 478 478 479 <div className="relative z-10 flex w-full max-w-sm flex-col gap-6"> 479 480 <a href="/" className="flex items-center gap-2 self-center font-medium"> 480 - <Calendar className="size-4" color="#0066ff" /> 481 - One Calendar 482 - </a> 481 + <Image src="/icon.svg" alt="One Calendar" width={16} height={16} className="size-4" /> 482 + One Calendar 483 + </a> 483 484 484 485 <motion.div initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.5 }}> 485 486 <Card className="max-w-md w-full overflow-hidden">
+2 -2
components/auth/auth-brand.tsx
··· 1 - import { Calendar } from "lucide-react" 1 + import Image from "next/image" 2 2 3 3 export function AuthBrand() { 4 4 return ( 5 5 <a href="https://xyehr.cn" className="flex items-center gap-2 self-center font-medium text-foreground"> 6 6 <span className="flex size-6 items-center justify-center rounded-md bg-primary/15 text-primary"> 7 - <Calendar className="size-4" /> 7 + <Image src="/icon.svg" alt="One Calendar" width={16} height={16} className="size-4" /> 8 8 </span> 9 9 <span>Tech-Art</span> 10 10 </a>
+1 -1
package.json
··· 1 1 { 2 2 "name": "one-calendar", 3 - "version": "2.1.0", 3 + "version": "2.1.3", 4 4 "private": true, 5 5 "packageManager": "bun@1.3.6", 6 6 "scripts": {