@@ -18,17 +17,21 @@ const Page = async () => {
{events?.length ? (
- {events?.map(({ cover_image, date_time, name, venue }, index) => (
-
-
-
- ))}
+ {events?.map(
+ ({ cover_image, event_start_date, name, venue, id, event_mode }, index) => (
+
+
+
+ ),
+ )}
) : (
No Events
diff --git a/frontend/src/constants/endpoints.ts b/frontend/src/constants/endpoints.ts
index d15ff352..b9a186af 100644
--- a/frontend/src/constants/endpoints.ts
+++ b/frontend/src/constants/endpoints.ts
@@ -2,4 +2,5 @@ export const API_ENDPOINTS = {
contactUs: '/contact-us',
newsletter: '/newsletter',
events: '/events',
+ event: '/events/:id',
}
diff --git a/frontend/src/containers/Event/Event.tsx b/frontend/src/containers/Event/Event.tsx
index 7ea8f6bc..0a05b2a0 100644
--- a/frontend/src/containers/Event/Event.tsx
+++ b/frontend/src/containers/Event/Event.tsx
@@ -4,70 +4,116 @@ import event1 from '../../../public/01.svg'
import wave1 from '../../../public/wave01.png'
import wave2 from '../../../public/wave02.png'
+import dayjs from 'dayjs'
+
import { Button } from '@/components'
import { CiClock1, CiLocationOn } from 'react-icons/ci'
import { SlCalender } from 'react-icons/sl'
import { MdWavingHand } from 'react-icons/md'
import { RegisterEvent } from '../RegisterEvent'
+import { google } from 'calendar-link'
+import type { Event } from '@/types'
+import Link from 'next/link'
+import { calculateDuration } from '@/utils'
+import sanitizeHtml from 'sanitize-html';
+
+
+const Event = async ({
+ event: {
+ name,
+ cover_image,
+ venue,
+ venue_map_link,
+ description,
+ city,
+ event_end_date,
+ event_mode,
+ event_start_date,
+ registration_end_date,
+ },
+}: {
+ event: Event
+}) => {
+ const sanitizedDescription = sanitizeHtml(description, {
+ allowedTags: ['b', 'i', 'em', 'strong', 'a', 'p', 'br'],
+ allowedAttributes: {
+ a: ['href','target'],
+ },
+ });
+
+ const duration = calculateDuration(event_end_date, event_start_date)
-const imageSrc = event1
-const title = 'Django India Opening Event'
+ const eventLink = google({
+ title: name,
+ description,
+ start: event_start_date,
+ end: event_end_date,
+ duration: [duration.hours, 'hours'],
+ })
-const Event = () => {
return (
-
+
-
{title}
-
21 July 2024, 04:30 PM - 07:00PM
-
New Delhi
+
{name}
+
Starts {dayjs(event_start_date).format('DD MMMM, YYYY')} at {dayjs(event_start_date).format('hh:mm A')}
+ {city &&
City: {city} }
+
When
- 21 July 2024, Sunday
+ {dayjs(event_start_date).format('DD MMMM, YYYY')}
+ {event_end_date && ` - ${dayjs(event_end_date).format('DD MMMM, YYYY')}`}
- 04:30 PM - 07:00 PM
+ {dayjs(event_start_date).format('hh:mm A')} -
+ {dayjs(event_end_date).format('hh:mm A')}
{/* TODO: Use text variant of button */}
- Add to Calender
+
+
+ Add to Calender
+
+
-
-
Where
-
+ {venue &&
+
- 8A/33, Channa Market, Block 8A, WEA, Karol Bagh, New Delhi, Delhi,
- 110005
-
-
+ Where
+
+ {venue}
+ }
-
-
-
-
- Hey Everyone
-
-
- DjangoCon 2024 is the premier gathering for Django enthusiasts,
- developers, and industry professionals. Join us for three days of
- insightful talks, hands-on workshops, and valuable networking
- opportunities. This year's conference is packed with sessions
- led by some of the brightest minds in the Django community.
-
+ >}
@@ -77,10 +123,10 @@ const Event = () => {
RSVP for this event now!
-
Registration ends Jul 24, 2024
+
Registration ends {dayjs(registration_end_date).format('DD MMMM, YYYY')} at {dayjs(registration_end_date).format('hh:mm A')}
- In Person
+ {event_mode}
diff --git a/frontend/src/containers/RegisterEvent/RegisterEvent.tsx b/frontend/src/containers/RegisterEvent/RegisterEvent.tsx
index d6b9e2eb..3b2ee85e 100644
--- a/frontend/src/containers/RegisterEvent/RegisterEvent.tsx
+++ b/frontend/src/containers/RegisterEvent/RegisterEvent.tsx
@@ -19,7 +19,9 @@ export const RegisterEvent = () => {
return (
- Register
+
+ Register
+
diff --git a/frontend/src/sections/EventSection/EventCard.tsx b/frontend/src/sections/EventSection/EventCard.tsx
index 46e88853..648fd99f 100644
--- a/frontend/src/sections/EventSection/EventCard.tsx
+++ b/frontend/src/sections/EventSection/EventCard.tsx
@@ -1,59 +1,77 @@
+'use client'
+
import React from 'react'
import Image from 'next/image'
import dayjs from 'dayjs'
-import calendar from 'dayjs/plugin/calendar'
+import event2 from '../../../public/02.svg'
+import { useRouter } from 'next/navigation'
-dayjs.extend(calendar)
interface EventProps {
+ eventId: string
title: string
date: string
imageSrc: string
venue: string
time: string
+ event_mode: string
}
const EventCard: React.FC = ({
+ eventId,
title,
date,
imageSrc,
venue,
time,
+ event_mode
}) => {
+ const router = useRouter()
+
return (
-
-
-
-
-
-
-
-
-
- {dayjs(date).format('MMM')}
-
-
-
- {dayjs(date).format('YY')}
-
-
-
-
-
{title}
-
Venue: {venue}
-
{dayjs().calendar(time)}
+
router.push(`/events/${eventId}`)}
+ >
+
+
+
+
+
+
+
+ {dayjs(date).format('MMM')}
+
+
+
+ {dayjs(date).format('YY')}
+
+
+
+ {title}
+
+
+ Mode:
+ {event_mode}
+
+ {venue &&
+ Venue:
+
+ {venue}
+
}
+
{dayjs(time).format('hh:mm A')}
+
)
diff --git a/frontend/src/sections/EventSection/Main.tsx b/frontend/src/sections/EventSection/Main.tsx
index ed6fc6fb..59cfd71f 100644
--- a/frontend/src/sections/EventSection/Main.tsx
+++ b/frontend/src/sections/EventSection/Main.tsx
@@ -24,19 +24,24 @@ const Main: React.FC = async () => {
Upcoming Events
-
+
{events?.length ? (
- {events?.map(({ cover_image, date_time, id, name, venue }) => (
-
+ {events?.map(({ cover_image, event_start_date, id, name, venue,event_mode }) => (
+
@@ -46,7 +51,7 @@ const Main: React.FC = async () => {
) : (
-
No Upcoming Events
+
No Upcoming Events
)}
diff --git a/frontend/src/types/common.ts b/frontend/src/types/common.ts
new file mode 100644
index 00000000..0e17540d
--- /dev/null
+++ b/frontend/src/types/common.ts
@@ -0,0 +1,4 @@
+export type PageProps
= {
+ params: TParams
+ searchParams: TSearchParams
+}
diff --git a/frontend/src/types/events.ts b/frontend/src/types/events.ts
index 928d4485..690737ff 100644
--- a/frontend/src/types/events.ts
+++ b/frontend/src/types/events.ts
@@ -6,7 +6,10 @@ export type Event = {
venue: string
city: string
venue_map_link: string
- date_time: string
+ event_start_date: string
+ event_end_date: string
+ registration_end_date: string
+ event_mode: string
}
export type EventsResponse = Event[]
diff --git a/frontend/src/utils/calculateDuration.ts b/frontend/src/utils/calculateDuration.ts
new file mode 100644
index 00000000..54c11779
--- /dev/null
+++ b/frontend/src/utils/calculateDuration.ts
@@ -0,0 +1,31 @@
+export const calculateDuration = (date1: string, date2: string) => {
+ // Ensure date1 is the earlier date
+ let startDate = new Date(date1)
+ let endDate = new Date(date2)
+
+ if (startDate.getTime() > endDate.getTime()) {
+ ;[startDate, endDate] = [endDate, startDate]
+ }
+
+ // Calculate the difference in milliseconds
+ const diffMilliseconds = endDate.getTime() - startDate.getTime()
+
+ // Calculate the differences in various units
+ const diffHours = diffMilliseconds / (1000 * 60 * 60)
+ const diffDays = diffMilliseconds / (1000 * 60 * 60 * 24)
+ const diffWeeks = diffMilliseconds / (1000 * 60 * 60 * 24 * 7)
+
+ // Calculate months and years
+ const diffYears = endDate.getFullYear() - startDate.getFullYear()
+ const diffMonths =
+ diffYears * 12 + (endDate.getMonth() - startDate.getMonth())
+
+ // Return an object with all the calculated durations
+ return {
+ hours: Math.floor(diffHours),
+ days: Math.floor(diffDays),
+ weeks: Math.floor(diffWeeks),
+ months: diffMonths,
+ years: diffYears,
+ }
+}
diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts
index 6ce1725b..a5ea791b 100644
--- a/frontend/src/utils/index.ts
+++ b/frontend/src/utils/index.ts
@@ -1 +1,2 @@
export * from './fetchData'
+export * from './calculateDuration'
diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json
index be7efd9f..65e69921 100644
--- a/frontend/tsconfig.json
+++ b/frontend/tsconfig.json
@@ -1,6 +1,10 @@
{
"compilerOptions": {
- "lib": ["dom", "dom.iterable", "esnext"],
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
@@ -18,15 +22,36 @@
}
],
"paths": {
- "@/*": ["./src/*"],
- "@components": ["./src/components"],
- "@sections": ["./src/sections"],
- "@constants": ["./src/constants"],
- "@containers": ["./src/containers"],
- "@hooks": ["./src/hooks"],
- "@utils": ["./src/utils"]
+ "@/*": [
+ "./src/*"
+ ],
+ "@components": [
+ "./src/components"
+ ],
+ "@sections": [
+ "./src/sections"
+ ],
+ "@constants": [
+ "./src/constants"
+ ],
+ "@containers": [
+ "./src/containers"
+ ],
+ "@hooks": [
+ "./src/hooks"
+ ],
+ "@utils": [
+ "./src/utils"
+ ]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
- "exclude": ["node_modules"]
+ "include": [
+ "next-env.d.ts",
+ "**/*.ts",
+ "**/*.tsx",
+ ".next/types/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
}
From 34bf4d3bc3f78869ed5643942411bb25b0c0db60 Mon Sep 17 00:00:00 2001
From: Saurabh Sharma
Date: Thu, 22 Aug 2024 01:32:54 +0530
Subject: [PATCH 14/39] Fix build and type errors (#101)
* Fix build and type errors
* minor
---------
Co-authored-by: Saurabh
Co-authored-by: devilsautumn
---
frontend/package-lock.json | 10 ++++++++++
frontend/package.json | 1 +
frontend/src/app/(core)/layout.tsx | 4 ++--
frontend/src/containers/ContactUs/ContactUs.tsx | 2 +-
frontend/src/containers/Event/Event.tsx | 4 ++--
frontend/src/sections/EventSection/EventCard.tsx | 1 +
frontend/src/sections/Latestupdate/LatestUpdate.tsx | 6 +++---
frontend/src/utils/fetchData.ts | 8 ++++----
8 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index e700b4c2..184f8bb1 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -36,6 +36,7 @@
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "@types/sanitize-html": "^2.13.0",
"@typescript-eslint/eslint-plugin": "^7.16.0",
"@typescript-eslint/parser": "^7.16.0",
"eslint": "^8.57.0",
@@ -957,6 +958,15 @@
"@types/react": "*"
}
},
+ "node_modules/@types/sanitize-html": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.13.0.tgz",
+ "integrity": "sha512-X31WxbvW9TjIhZZNyNBZ/p5ax4ti7qsNDBDEnH4zAgmEh35YnFD1UiS6z9Cd34kKm0LslFW0KPmTQzu/oGtsqQ==",
+ "dev": true,
+ "dependencies": {
+ "htmlparser2": "^8.0.0"
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "7.16.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 88406d72..49aecb04 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -37,6 +37,7 @@
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
+ "@types/sanitize-html": "^2.13.0",
"@typescript-eslint/eslint-plugin": "^7.16.0",
"@typescript-eslint/parser": "^7.16.0",
"eslint": "^8.57.0",
diff --git a/frontend/src/app/(core)/layout.tsx b/frontend/src/app/(core)/layout.tsx
index e9bb09cb..375c93f8 100644
--- a/frontend/src/app/(core)/layout.tsx
+++ b/frontend/src/app/(core)/layout.tsx
@@ -2,10 +2,10 @@
import { Navbar, Footer } from '@sections'
import React, { PropsWithChildren } from 'react'
-import { SnackbarProvider, useSnackbar } from 'notistack'
+import { SnackbarKey, SnackbarProvider, useSnackbar } from 'notistack'
import { MdOutlineCancel } from 'react-icons/md'
-const SnackbarCloseButton = ({ snackbarKey }) => {
+const SnackbarCloseButton = ({ snackbarKey }: { snackbarKey: SnackbarKey }) => {
const { closeSnackbar } = useSnackbar()
return (
diff --git a/frontend/src/containers/ContactUs/ContactUs.tsx b/frontend/src/containers/ContactUs/ContactUs.tsx
index ef49e906..bfae00d4 100644
--- a/frontend/src/containers/ContactUs/ContactUs.tsx
+++ b/frontend/src/containers/ContactUs/ContactUs.tsx
@@ -20,7 +20,7 @@ const ContactUs = () => {
})
const onSubmit: SubmitHandler = async (data) => {
- const res = await fetchData(API_ENDPOINTS.contactUs, {
+ const res = await fetchData<{message: string}>(API_ENDPOINTS.contactUs, {
method: 'POST',
body: JSON.stringify(data),
})
diff --git a/frontend/src/containers/Event/Event.tsx b/frontend/src/containers/Event/Event.tsx
index 0a05b2a0..ef28651f 100644
--- a/frontend/src/containers/Event/Event.tsx
+++ b/frontend/src/containers/Event/Event.tsx
@@ -18,7 +18,7 @@ import { calculateDuration } from '@/utils'
import sanitizeHtml from 'sanitize-html';
-const Event = async ({
+const EventContainer = async ({
event: {
name,
cover_image,
@@ -134,4 +134,4 @@ const Event = async ({
)
}
-export default Event
+export default EventContainer
diff --git a/frontend/src/sections/EventSection/EventCard.tsx b/frontend/src/sections/EventSection/EventCard.tsx
index 648fd99f..58a67078 100644
--- a/frontend/src/sections/EventSection/EventCard.tsx
+++ b/frontend/src/sections/EventSection/EventCard.tsx
@@ -6,6 +6,7 @@ import dayjs from 'dayjs'
import event2 from '../../../public/02.svg'
import { useRouter } from 'next/navigation'
+
interface EventProps {
eventId: string
title: string
diff --git a/frontend/src/sections/Latestupdate/LatestUpdate.tsx b/frontend/src/sections/Latestupdate/LatestUpdate.tsx
index bdad232f..7ad2ca3c 100644
--- a/frontend/src/sections/Latestupdate/LatestUpdate.tsx
+++ b/frontend/src/sections/Latestupdate/LatestUpdate.tsx
@@ -7,7 +7,7 @@ import './styles.css'
import { Button } from '@/components'
import { SubmitHandler, useForm } from 'react-hook-form'
import { NewsletterForm } from './LatestUpdate.types'
-import { fetchData} from '@utils'
+import { fetchData } from '@utils'
import { API_ENDPOINTS, NEWSLETTER_FORM_SCHEMA } from '@constants'
import { yupResolver } from '@hookform/resolvers/yup'
import { enqueueSnackbar } from 'notistack'
@@ -23,10 +23,10 @@ function Update() {
})
const onSubmit: SubmitHandler = async (data) => {
- const res = await fetchData(API_ENDPOINTS.newsletter, {
+ const res = await fetchData<{ message: string }>(API_ENDPOINTS.newsletter, {
method: 'POST',
body: JSON.stringify(data),
- })
+ })
if (res.statusCode === 200 || res.statusCode === 201) {
enqueueSnackbar(res?.data?.message, { variant: 'success' })
} else {
diff --git a/frontend/src/utils/fetchData.ts b/frontend/src/utils/fetchData.ts
index cfd9de27..13c50e3d 100644
--- a/frontend/src/utils/fetchData.ts
+++ b/frontend/src/utils/fetchData.ts
@@ -1,6 +1,6 @@
type ErrorResponse = {
message?: string
- // statusCode?: number
+ statusCode?: number
}
export type FetchResponse =
@@ -45,11 +45,11 @@ export const fetchData = async (
const responseBody = parsedResponse as TFetchedData
return { data: responseBody, error: null, statusCode: response.status }
- } catch (error) {
+ } catch (error: unknown) {
return {
data: null,
- error: { message: error.message },
- statusCode: error.statusCode,
+ error: { message: (error as ErrorResponse).message },
+ statusCode: (error as ErrorResponse).statusCode as number,
}
}
}
From 283536833694bda2b71f10208bcc2dbb08c5af6d Mon Sep 17 00:00:00 2001
From: Piyush Tilokani <112542519+Piyush-Tilokani@users.noreply.github.com>
Date: Thu, 22 Aug 2024 18:07:16 +0530
Subject: [PATCH 15/39] Added telegram Icon (#104)
* Added telegram logo
* Update telegram logo
* Updated telegram logo
* Fixed telegram logo size and border radius
---
frontend/public/icons/telegram.svg | 1 +
.../src/sections/JoinCommunity/JoinCommunity.tsx | 14 ++++++++++++++
2 files changed, 15 insertions(+)
create mode 100644 frontend/public/icons/telegram.svg
diff --git a/frontend/public/icons/telegram.svg b/frontend/public/icons/telegram.svg
new file mode 100644
index 00000000..cd9ffd8e
--- /dev/null
+++ b/frontend/public/icons/telegram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/src/sections/JoinCommunity/JoinCommunity.tsx b/frontend/src/sections/JoinCommunity/JoinCommunity.tsx
index 7e85f749..97453c07 100644
--- a/frontend/src/sections/JoinCommunity/JoinCommunity.tsx
+++ b/frontend/src/sections/JoinCommunity/JoinCommunity.tsx
@@ -133,6 +133,20 @@ function Join() {
className='transition transform hover:scale-110'
/>
+
+
+ 768 ? 65 : 45}
+ height={width > 768 ? 101 : 50.5}
+ className='transition transform hover:scale-110'
+ />
+
{/*
Date: Sat, 24 Aug 2024 00:38:48 +0530
Subject: [PATCH 16/39] SEO optimizations (#106)
---
frontend/public/djangoindia_logo.png | Bin 0 -> 4770 bytes
frontend/public/djangoindia_twitter.png | Bin 0 -> 4610 bytes
frontend/src/app/apple-icon.png | Bin 0 -> 12146 bytes
frontend/src/app/favicon.ico | Bin 0 -> 15406 bytes
frontend/src/app/icon1.png | Bin 0 -> 549 bytes
frontend/src/app/icon2.png | Bin 0 -> 1262 bytes
frontend/src/app/icon3.png | Bin 0 -> 13641 bytes
frontend/src/app/icon4.png | Bin 0 -> 53412 bytes
frontend/src/app/layout.tsx | 29 +++++++++++++++++++++++-
9 files changed, 28 insertions(+), 1 deletion(-)
create mode 100644 frontend/public/djangoindia_logo.png
create mode 100644 frontend/public/djangoindia_twitter.png
create mode 100644 frontend/src/app/apple-icon.png
create mode 100644 frontend/src/app/favicon.ico
create mode 100644 frontend/src/app/icon1.png
create mode 100644 frontend/src/app/icon2.png
create mode 100644 frontend/src/app/icon3.png
create mode 100644 frontend/src/app/icon4.png
diff --git a/frontend/public/djangoindia_logo.png b/frontend/public/djangoindia_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b8ca2764562d82d6fcbeb6f447e37264c0efe066
GIT binary patch
literal 4770
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
literal 0
HcmV?d00001
diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..bab6b489647112c2d90cdd925b97843129e57b21
GIT binary patch
literal 15406
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
literal 0
HcmV?d00001
diff --git a/frontend/src/app/icon1.png b/frontend/src/app/icon1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bf01df5aade639c18292a55823fa64334703aa6a
GIT binary patch
literal 549
zcmV+=0^0qFP)Px$-$_J4R5(wilTBz7Q4q&}n?%gEyH$`NBp%g+r;Vbhq!e4El`2I}6ByZX1xvX0c{cM0@&?S{El?pavUZwTk)6Lf3T%aO>V3PDeX=dh<40Hf}C!
zQ0G-?Hw>2YITjHlGt;c{YOL|CheeBEFz5h2Pkm*_;eGhl`PgM_V`S{UU4dzuY&Q(*
zR4*Rf%olTLYCVd8!c3k}DC7X7LX(L&!w>J0{`mu4(>S{SAOkn9lK7Bd_|g?y1L;z1
zkHPx(s7XXYR9HvNmw!yuWgN#}_bWL#2)H}(5SXGtGeZ6&_j_Qci(S&9z5a<#+{AP
z_x9cH`}}&ppU>z0`Fx&7qpGSASPjeqMgkFlmce-xpdD}n-vWgiRaHL*mJJTxfU9m0
z1nPl@1{^v#0~!Q@+d$;ttUutYZGwP*5Pd!n14R%}2O2e){UH%h6onhDUdclP#61{`
z-|y%4own{ajfUtb(|z#_iNHnIW$ZJvB)|g(1D?ur)SRp1>6f09ZNtqLoChk=YQvA-
zkO*A3?BvmBr}YqMI_}_mV1jcyF?MpU9>VX*4o#
zPENSk-2%Qh3{RhTkh^RVm#(?`Tu_KmXrRVX%j8}faQ=Mazl+dwqlG8tOy|0%NrD^n
zdQwNG(AIv3tAG8`rwE1Ft#R>O`0039A`G}I$O3CiKV@}Eu>?vmTiEf@CLSJ}Cap0k
zZ*~uX#$#t?7-r>Xlc-hD#+W%-ap)fns0yt+Hxe~98(l&Qsz!szcLG#Iie9gmulNok
zFry%sLsiEl&^raMQMh=S9MoSFys@T`59cq!)aqgUv{|T%iun0`KH7gR$B;S>U1T)F
zMvj%!h{NmKI`SVu*~4>?RS=fM7WB`5DwUoRt`O%G`m}%~u(gzuq77739>Ee5&m*IgDLcB41zB?`-v1@`yqt`T3{p~3q$Pq}u;Ggm3OB8npn9F2cNf0SGntcc{q833t;Ini
zJaMLmPrmw`E$cRNwBaO)u?d|2)5+xYr>Ju`;BeP7am?c=s>*e56VB^bnLlYRWo2d9
z?RHXAQ;Cg@4JOds(#-T%a&R~s`i<#87#^-V#?qpd-B>?i9t!
zY&J^`iDK5()g}8H8yiVWOY7SL0`LFjZaoMP5N&}q0_22+#QU#2(68g~b_hRi*}IEX
zo7UsK)hb()5^NmV@eNjsWuWOj{k=C6QaKLH^!a>jFW*Dy?(LkecaT0RmC_H^@#Odk
z_f-j{#lk%k3O{?jUQX4W!JeKWMRh-AIIyX(350Ct5C{G*j^#ssF&Xl!*^pmOhxB^>
YH-xoTVN!1hbN~PV07*qoM6N<$g5JGd{{R30
literal 0
HcmV?d00001
diff --git a/frontend/src/app/icon3.png b/frontend/src/app/icon3.png
new file mode 100644
index 0000000000000000000000000000000000000000..d5fb5ef21630761a8704e98afe4c784afe1c5d83
GIT binary patch
literal 13641
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