diff --git a/app/about/OrganizerCard.tsx b/app/about/OrganizerCard.tsx index 9fa93da..063a716 100644 --- a/app/about/OrganizerCard.tsx +++ b/app/about/OrganizerCard.tsx @@ -3,7 +3,7 @@ export const OrganizerCard = ({ }: { organizer: { name: string; imageSrc: string; linkedIn: string } }) => ( -
+
{name}

{name}

+
-
+

About us

{" "} {`We're a community of developers of all skill levels, dedicated to fostering a fun and - educational environment. Hosted by Sam Holmes and a team of passionate organizers, our - monthly meetups offer an opportunity to network, learn, and showcase your projects. At + educational environment. Hosted by a team of passionate organizers, our + monthly meetups offer an opportunity to network, learn, and showcase community projects. At each event, you'll enjoy complimentary food and drinks during our networking lunch, followed by a series of engaging presentations on various developer and engineering topics. After the talks, we break into groups for casual networking, project showcases, @@ -31,7 +31,7 @@ export default function About() {

-
+

Organizers

{organizers.map((organizer) => ( diff --git a/app/components/DeepNote.tsx b/app/components/DeepNote.tsx new file mode 100644 index 0000000..5e976e9 --- /dev/null +++ b/app/components/DeepNote.tsx @@ -0,0 +1,74 @@ +"use client" + +let hasPlayed = false + +export function DeepNote({ children }: { children: React.ReactNode }) { + const handleMouseEnter = () => { + if (!hasPlayed) { + playDeepNote() + hasPlayed = true + } + } + + return
{children}
+} + +function playDeepNote() { + const audioContext = new (window.AudioContext || window.AudioContext)() + const duration = 6 // Duration of the frequency sweep in seconds + const fadeDuration = 2 // Duration of the fade-out in seconds + const totalDuration = duration + fadeDuration + const numOscillators = 30 // Number of oscillators to simulate the original effect + const initialMinFreq = 50 // Initial minimum frequency in Hz (two octaves lower) + const initialMaxFreq = 100 // Initial maximum frequency in Hz (two octaves lower) + const finalMinFreq = 18.75 // Final minimum frequency in Hz (D0, two octaves lower) + const finalMaxFreq = 450 // Final maximum frequency in Hz (A4, two octaves lower) + + // Create a gain node for volume control + const gainNode = audioContext.createGain() + gainNode.gain.setValueAtTime(0.05, audioContext.currentTime) // Start with low volume + gainNode.connect(audioContext.destination) + + // Function to generate a random frequency within a specified range + function randomFrequency(min: number, max: number) { + return Math.random() * (max - min) + min + } + + // Function to generate a random detune value + function randomDetune(cents: number) { + return (Math.random() - 0.5) * cents + } + + // Create oscillators with random initial frequencies and sweeping to target frequencies + for (let i = 0; i < numOscillators; i++) { + const oscillator = audioContext.createOscillator() + const startFrequency = randomFrequency(initialMinFreq, initialMaxFreq) + const endFrequency = randomFrequency(finalMinFreq, finalMaxFreq) + const detune = randomDetune(20) // Detune by up to ±10 cents + + oscillator.type = "sawtooth" // Richer harmonic content + oscillator.frequency.setValueAtTime(startFrequency, audioContext.currentTime) + oscillator.frequency.linearRampToValueAtTime(endFrequency, audioContext.currentTime + duration) + oscillator.detune.setValueAtTime(detune, audioContext.currentTime) + + // Apply subtle vibrato + const vibrato = audioContext.createOscillator() + vibrato.frequency.setValueAtTime(5, audioContext.currentTime) // 5 Hz vibrato rate + const vibratoGain = audioContext.createGain() + vibratoGain.gain.setValueAtTime(2, audioContext.currentTime) // ±2 Hz vibrato depth + vibrato.connect(vibratoGain) + vibratoGain.connect(oscillator.frequency) + vibrato.start() + vibrato.stop(audioContext.currentTime + totalDuration) + + // Connect oscillator to the gain node + oscillator.connect(gainNode) + oscillator.start() + oscillator.stop(audioContext.currentTime + totalDuration) + } + + // Create a gain envelope for fade-in and fade-out + gainNode.gain.linearRampToValueAtTime(0.4, audioContext.currentTime + 2) // Gradual fade-in + gainNode.gain.linearRampToValueAtTime(0.3, audioContext.currentTime + duration) // Sustain moderate volume + gainNode.gain.linearRampToValueAtTime(0.0, audioContext.currentTime + totalDuration) // Smooth fade-out +} diff --git a/app/components/Footer.tsx b/app/components/Footer.tsx index 94b2449..425ca00 100644 --- a/app/components/Footer.tsx +++ b/app/components/Footer.tsx @@ -2,14 +2,25 @@ import { links } from "../siteConfig" const Footer = () => { return ( -
- - + +
diff --git a/app/components/PotionBackground.tsx b/app/components/PotionBackground.tsx index 7f74179..52ad4f6 100644 --- a/app/components/PotionBackground.tsx +++ b/app/components/PotionBackground.tsx @@ -18,47 +18,68 @@ export const PotionBackground = () => { xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="none" - style={{ width: "100%", height: "100%" }} + style={{ aspectRatio: 1, minWidth: "100%", minHeight: "100%" }} > - - - + + + - - - + + + - - - + + + - - + + + - + + - + + diff --git a/app/globals.css b/app/globals.css index c06855d..431129d 100644 --- a/app/globals.css +++ b/app/globals.css @@ -2,6 +2,11 @@ @tailwind components; @tailwind utilities; +:root { + --b1: #000000; + --n: 21% 0.003 296.813; +} + @media (prefers-color-scheme: dark) { html { color-scheme: dark; @@ -51,4 +56,4 @@ main { .devx-logo-copyright { margin-top: 0; } -} \ No newline at end of file +} diff --git a/app/page.tsx b/app/page.tsx index d941f26..c17f545 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,31 +1,33 @@ import React from "react" import { PotionBackground } from "./components/PotionBackground" +import { DeepNote } from "./components/DeepNote" const Home: React.FC = () => { return ( <>
- -
- Developer meetup hero -
+ + +
+ Developer meetup hero +
-
-

- Fostering developer community through events and open-source projects in San Diego, - California. -

-
+
+

+ Fostering developer community through events and open-source projects in San Diego, + California. +

+
- {/*
+ {/*

Past Events

@@ -35,7 +37,7 @@ const Home: React.FC = () => {

*/} - {/*
+ {/*

Sponsors

@@ -44,6 +46,7 @@ const Home: React.FC = () => {

*/} +
) diff --git a/app/siteConfig.ts b/app/siteConfig.ts index d1bcdda..0d93c83 100644 --- a/app/siteConfig.ts +++ b/app/siteConfig.ts @@ -8,6 +8,7 @@ export const siteConfig = { export const links = { talkSubmissionUrl: "https://forms.gle/6gtGEuL7XExHvc6c9", meetupUrl: "https://meetup.com/san-diego-devx", + linkedInUrl: "https://www.linkedin.com/company/devxsd/", lumaUrl: "https://lu.ma/DEVxNetwork", discord: "https://discord.gg/J3YrrErwjc", github: "https://github.com/DEVxNetwork", diff --git a/public/images/DEVxLogo.png b/public/images/DEVxLogo.png new file mode 100644 index 0000000..2712ed8 Binary files /dev/null and b/public/images/DEVxLogo.png differ diff --git a/public/images/logo-header.png b/public/images/logo-header.png new file mode 100644 index 0000000..879ee84 Binary files /dev/null and b/public/images/logo-header.png differ diff --git a/public/images/logo.jpeg b/public/images/logo.jpeg deleted file mode 100644 index 45b786a..0000000 Binary files a/public/images/logo.jpeg and /dev/null differ diff --git a/public/images/logo.png b/public/images/logo.png new file mode 100644 index 0000000..e5b114a Binary files /dev/null and b/public/images/logo.png differ diff --git a/public/images/sd-devx-brand.png b/public/images/sd-devx-brand.png index 8a503ef..eb47c49 100644 Binary files a/public/images/sd-devx-brand.png and b/public/images/sd-devx-brand.png differ