Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
98eed2d
Merge pull request #39 from osvauld/dev
tonyantony300 Jan 23, 2025
59fa7fb
Merge pull request #41 from osvauld/dev
tonyantony300 Jan 24, 2025
5ddfb1a
Merge pull request #42 from osvauld/dev
tonyantony300 Jan 24, 2025
21e67cb
Merge pull request #43 from osvauld/dev
tonyantony300 Jan 24, 2025
9d356c4
Merge pull request #44 from osvauld/dev
tonyantony300 Jan 25, 2025
ff287bd
Merge pull request #46 from osvauld/dev
tonyantony300 Jan 29, 2025
934efdc
schema changes
tonyantony300 Feb 28, 2025
12ba719
Much needed cotent change
tonyantony300 Jul 17, 2025
be15dae
story update
tonyantony300 Jul 17, 2025
dcc1954
livnote added
tonyantony300 Jul 18, 2025
15138dc
features section added
tonyantony300 Jul 18, 2025
7ba8990
philosophy check point
tonyantony300 Jul 18, 2025
1ec631c
livnote image added
tonyantony300 Jul 18, 2025
ea3d903
philosophy section done
tonyantony300 Jul 18, 2025
5960da9
Livnote changes
tonyantony300 Jul 18, 2025
f22a16f
spacing fixes
tonyantony300 Jul 19, 2025
f71660d
color changes
tonyantony300 Jul 19, 2025
a5538ed
svgs added
tonyantony300 Jul 19, 2025
22d0110
Updated thumbnails
tonyantony300 Jul 19, 2025
04e1e69
Merge pull request #55 from osvauld/feature/livnote
tonyantony300 Jul 19, 2025
1f4958a
import failure
tonyantony300 Jul 19, 2025
2d211a3
Merge pull request #56 from osvauld/feature/livnote
tonyantony300 Jul 19, 2025
1f53788
perf(livnote): better image compression
tonyantony300 Jul 23, 2025
3760676
Merge pull request #57 from osvauld/perf/livnote-optimization
tonyantony300 Jul 23, 2025
ad3dc74
Download button active
tonyantony300 Aug 4, 2025
780a383
Merge pull request #58 from osvauld/feature/download-options
tonyantony300 Aug 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
"@astrojs/tailwind": "^5.1.0",
"@calcom/embed-react": "^1.5.0",
"@fontsource/inter": "^5.0.19",
"@fontsource/jetbrains-mono": "^5.2.6",
"@fontsource/plus-jakarta-sans": "^5.0.20",
"astro": "^4.12.1",
"astro-seo": "^0.8.4",
Expand Down
Binary file added public/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions src/assets/icons/Download.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

export const Download = ({ size = 24 }) => (
<svg width={size} height={size} viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fillRule="evenodd" clipRule="evenodd" d="M12.885 16.675C12.64 16.92 12.32 17.04 12 17.04C11.68 17.04 11.36 16.92 11.115 16.675L6.47 12.03L7.53 10.97L11.25 14.69V3H12.75V14.69L16.47 10.97L17.53 12.03L12.885 16.675ZM19.5 18.25V15.5H21V18.25C21 19.765 19.765 21 18.25 21H5.75C4.235 21 3 19.765 3 18.25V15.5H4.5V18.25C4.5 18.94 5.06 19.5 5.75 19.5H18.25C18.94 19.5 19.5 18.94 19.5 18.25Z" fill="currentColor"/>
</svg>
)
6 changes: 3 additions & 3 deletions src/assets/icons/PlayButton.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from "react";
export const PlayButton = () => (
export const PlayButton = ({ color = "#89B4FA" }) => (
<svg
width="20"
height="20"
Expand All @@ -18,11 +18,11 @@ export const PlayButton = () => (
fillRule="evenodd"
clipRule="evenodd"
d="M2 12C2 17.515 6.485 22 12 22C17.515 22 22 17.515 22 12C22 6.485 17.515 2 12 2C6.485 2 2 6.485 2 12ZM3.5 12C3.5 7.315 7.315 3.5 12 3.5C16.685 3.5 20.5 7.315 20.5 12C20.5 16.685 16.685 20.5 12 20.5C7.315 20.5 3.5 16.685 3.5 12ZM9.625 16.215C9.82 16.33 10.035 16.385 10.25 16.385V16.38C10.465 16.38 10.68 16.325 10.875 16.21L16.3 13.075C16.69 12.85 16.925 12.44 16.925 11.995C16.925 11.55 16.685 11.135 16.3 10.91L10.875 7.77501C10.485 7.55001 10.015 7.55001 9.625 7.77501C9.235 8.00501 9 8.41001 9 8.86001V15.13C9 15.585 9.235 15.99 9.625 16.215ZM10.5 14.7V9.30001L15.175 12L10.5 14.7Z"
fill="#89B4FA"
fill={color}
/>
<path
d="M10.25 16.385V16.885H10.75V16.385H10.25ZM9.625 16.215L9.879 15.7843L9.87486 15.7819L9.625 16.215ZM10.25 16.38V15.88H9.75V16.38H10.25ZM10.875 16.21L10.6248 15.7771L10.621 15.7793L10.875 16.21ZM16.3 13.075L16.0501 12.6419L16.0498 12.6421L16.3 13.075ZM16.3 10.91L16.5523 10.4783L16.5502 10.4771L16.3 10.91ZM10.875 7.77501L11.1252 7.3421L11.1249 7.34192L10.875 7.77501ZM9.625 7.77501L9.37513 7.3419L9.37101 7.34433L9.625 7.77501ZM10.5 9.30001L10.7501 8.86704L10 8.43385V9.30001H10.5ZM10.5 14.7H10V15.5662L10.7501 15.133L10.5 14.7ZM15.175 12L15.4251 12.433L16.1748 12L15.4251 11.567L15.175 12ZM12 21.5C6.76114 21.5 2.5 17.2389 2.5 12H1.5C1.5 17.7911 6.20886 22.5 12 22.5V21.5ZM21.5 12C21.5 17.2389 17.2389 21.5 12 21.5V22.5C17.7911 22.5 22.5 17.7911 22.5 12H21.5ZM12 2.5C17.2389 2.5 21.5 6.76114 21.5 12H22.5C22.5 6.20886 17.7911 1.5 12 1.5V2.5ZM2.5 12C2.5 6.76114 6.76114 2.5 12 2.5V1.5C6.20886 1.5 1.5 6.20886 1.5 12H2.5ZM12 3C7.03886 3 3 7.03886 3 12H4C4 7.59114 7.59114 4 12 4V3ZM21 12C21 7.03886 16.9611 3 12 3V4C16.4089 4 20 7.59114 20 12H21ZM12 21C16.9611 21 21 16.9611 21 12H20C20 16.4089 16.4089 20 12 20V21ZM3 12C3 16.9611 7.03886 21 12 21V20C7.59114 20 4 16.4089 4 12H3ZM10.25 15.885C10.1211 15.885 9.99426 15.8523 9.87899 15.7843L9.37101 16.6457C9.64574 16.8077 9.94894 16.885 10.25 16.885V15.885ZM9.75 16.38V16.385H10.75V16.38H9.75ZM10.621 15.7793C10.5057 15.8473 10.3789 15.88 10.25 15.88V16.88C10.5511 16.88 10.8543 16.8027 11.129 16.6407L10.621 15.7793ZM16.0498 12.6421L10.6248 15.7771L11.1252 16.6429L16.5502 13.5079L16.0498 12.6421ZM16.425 11.995C16.425 12.2615 16.2852 12.5063 16.0501 12.6419L16.5499 13.5081C17.0948 13.1937 17.425 12.6185 17.425 11.995H16.425ZM16.0477 11.3417C16.2807 11.4779 16.425 11.7293 16.425 11.995H17.425C17.425 11.3707 17.0893 10.7922 16.5523 10.4783L16.0477 11.3417ZM10.6248 8.20793L16.0498 11.3429L16.5502 10.4771L11.1252 7.3421L10.6248 8.20793ZM9.87486 8.20811C10.1102 8.07231 10.3898 8.07231 10.6251 8.20811L11.1249 7.34192C10.5802 7.02771 9.91977 7.02771 9.37514 7.34192L9.87486 8.20811ZM9.5 8.86001C9.5 8.59043 9.63845 8.34755 9.87899 8.2057L9.37101 7.34433C8.83155 7.66247 8.5 8.22959 8.5 8.86001H9.5ZM9.5 15.13V8.86001H8.5V15.13H9.5ZM9.87486 15.7819C9.63983 15.6463 9.5 15.4065 9.5 15.13H8.5C8.5 15.7635 8.83017 16.3337 9.37514 16.6481L9.87486 15.7819ZM10 9.30001V14.7H11V9.30001H10ZM15.4251 11.567L10.7501 8.86704L10.2499 9.73299L14.9249 12.433L15.4251 11.567ZM10.7501 15.133L15.4251 12.433L14.9249 11.567L10.2499 14.267L10.7501 15.133Z"
fill="#89B4FA"
fill={color}
mask="url(#path-1-inside-1_2879_26971)"
/>
</svg>
Expand Down
Binary file added src/assets/images/art.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/art.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/livnote.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/livnote.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/livnotethumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/images/osvauldthumb.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed src/assets/images/sharing.webm
Binary file not shown.
Binary file removed src/assets/images/thumbnail.webp
Binary file not shown.
118 changes: 118 additions & 0 deletions src/components/DownloadButton.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import React, { useState, useEffect } from "react";
import { Download } from "../assets/icons/Download";

const DownloadButton = () => {
const [platform, setPlatform] = useState("unknown");
const [showDropdown, setShowDropdown] = useState(false);

// Download URLs for different platforms
const downloadUrls = {
mac: "https://github.com/osvauld/osvauld/releases/download/alpha/osvauld_0.1.0_aarch64.dmg", // Replace with actual URL
linux: "https://github.com/osvauld/osvauld/releases/download/alpha/osvauld_0.1.0_amd64.deb", // Replace with actual URL
fedora: "https://github.com/osvauld/osvauld/releases/download/alpha/osvauld-0.1.0-1.x86_64.rpm", // Replace with actual URL
windows: "https://github.com/osvauld/osvauld/releases/download/alpha/osvauld_0.1.0_x64-setup.exe", // Replace with actual URL
};

// Platform names for display
const platformNames = {
mac: "Mac (Apple Silicon)",
linux: "Linux (Debian)",
fedora: "Linux (Fedora)",
windows: "Windows",
};

useEffect(() => {
// Detect user's platform
const userAgent = navigator.userAgent.toLowerCase();
const platform = navigator.platform.toLowerCase();

if (userAgent.includes("mac")) {
setPlatform("mac");
} else if (userAgent.includes("linux")) {
// Try to detect if it's Fedora or Debian-based
// This is a simplified detection - you might want to enhance this
if (userAgent.includes("fedora")) {
setPlatform("fedora");
} else {
setPlatform("linux");
}
} else if (userAgent.includes("windows")) {
setPlatform("windows");
} else {
setPlatform("unknown");
}
}, []);

const handleDownload = (selectedPlatform = platform) => {
if (selectedPlatform !== "unknown" && downloadUrls[selectedPlatform]) {
// Create a temporary anchor element to trigger download
const downloadUrl = downloadUrls[selectedPlatform];
const link = document.createElement('a');
link.href = downloadUrl;
link.download = downloadUrl.split('/').pop(); // Extract filename from URL
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
setShowDropdown(false);
} else {
// Show dropdown for manual selection
setShowDropdown(true);
}
};

const handlePlatformSelect = (selectedPlatform) => {
handleDownload(selectedPlatform);
};

return (
<div className="relative text-livnotePrimary">
<button
className="px-8 py-4 flex items-center justify-center gap-6 min-w-[200px] border-livnotePrimary border-2 rounded-lg text-xl hover:bg-dark1 transition-all duration-300"
onClick={() => handleDownload()}
aria-label={`Download for ${platformNames[platform] || 'your platform'}`}
>
<Download size={44} />

<div className="flex flex-col items-start">
<span className="text-2xl">Download</span>
{platform !== "unknown" && (
<span className="text-base mt-2 font-light whitespace-nowrap">
for {platformNames[platform]}
</span>
)}
</div>
</button>


{/* Dropdown for platform selection */}
{showDropdown && (
<div className="absolute top-full left-0 mt-2 w-64 border z-50 bg-dark1 border-livnotePrimary rounded-lg">
<div className="p-2">
<div className="text-sm px-3 py-2 border-b border-livnotePrimary my-1">
Choose your platform:
</div>
{Object.entries(platformNames).map(([key, name]) => (
<button
key={key}
onClick={() => handlePlatformSelect(key)}
className="w-full text-left px-3 py-2 flex items-center justify-between hover:bg-dark2 transition-all duration-300"
>
<span>{name}</span>
</button>
))}
</div>
</div>
)}

{/* Backdrop to close dropdown */}
{showDropdown && (
<div
className="fixed inset-0 z-40"
onClick={() => setShowDropdown(false)}
/>
)}
</div>
);
};

export default DownloadButton;
46 changes: 26 additions & 20 deletions src/components/FooterV2.jsx
Original file line number Diff line number Diff line change
@@ -1,56 +1,62 @@
import { motion } from "framer-motion";
import { DiscordIcon } from "../assets/icons/DiscordIcon";
import { LinktreeIcon } from "../assets/icons/LinktreeIcon";
import { LinkdinIcon } from "../assets/icons/LinkdinIcon";
import { InstagramIcon } from "../assets/icons/InstagramIcon";
import { GithubIcon } from "../assets/icons/GithubIcon";
import { FooterOsvauld } from "../assets/logos/FooterOsvauld";
import Matrix from "../assets/logos/Matrix";
import Docker from "../assets/logos/Docker";
import Twitter from "../assets/logos/Twitter";
import Mastodon from "../assets/logos/Mastodon";

export const Footer = () => {
export const Footer = ({ isLivnote }) => {
const heading = isLivnote
? "Notes that live with you."
: "Protecting what matters the most.";
const buttonText = isLivnote ? "Explore Livnote" : "Join Waitlist";
const buttonLink = isLivnote
? "https://github.com/osvauld/osvauld"
: "https://getwaitlist.com/waitlist/14960";
return (
<motion.div
initial={{ opacity: 0 }}
whileInView={{ opacity: 1 }}
viewport={{ once: true }}
transition={{ duration: 0.5, delay: 0.2 }}
>
<section className="w-full bg-blue1 z-50">
<section id="page-footer" className={`w-full ${isLivnote ? "bg-livnotePrimary" : "bg-blue1"} z-50`}>
<footer className="relative mx-auto h-[56rem] px-[24px] pt-[32px] max-w-[1312px] min-h-[545px] lg:px-[60px] lg:pt-[60px]">
<div className="flex h-full flex-col gap-32">
<div className="flex flex-col gap-24">
<div className="icons flex items-center flex-wrap gap-10 mx-auto">
<GithubIcon color={"black"} size={"45px"} />
<DiscordIcon width={"45px"} height={"45px"} />{" "}
<Matrix width={"45px"} height={"45px"} />
<Mastodon width={"45px"} height={"45px"} />
{/* <Matrix width={"45px"} height={"45px"} />
<Mastodon width={"45px"} height={"45px"} /> */}
{/* <LinkdinIcon color={"black"} size={"45px"} />
<InstagramIcon color={"black"} size={"45px"} /> */}
</div>
<span className="mx-auto text-[54px] xl:text-[64px] tracking-[-2px] font-Jakartha font-semibold">
Protecting what matters the most.
<span className="mx-auto text-[54px] xl:text-[64px] tracking-[-2px] font-Jakartha font-semibold text-center">
{heading}
</span>
<div className="flex flex-col xs:flex-row justify-center items-center gap-4">
<button className="px-6 py-3 bg-black rounded-lg text-blue1 text-xl font-semibold flex justify-center items-center gap-4 min-w-[270px]">
<a href="https://getwaitlist.com/waitlist/14960">
Join Waitlist
</a>
<button className={`px-6 py-3 ${isLivnote ? "bg-black text-livnotePrimary" : "text-blue1 bg-black"} rounded-lg text-xl font-semibold flex justify-center items-center gap-4 min-w-[270px]`}>
<a href={buttonLink}>{buttonText}</a>
</button>
</div>
<div className="text-center flex flex-col gap-4">
<div className="flex items-center gap-4">
<a href="" className="ml-auto tracking-tight">
<a
href="/terms"
className="ml-auto tracking-tight"
aria-label="Terms of Use"
>
Terms of Use
</a>
<a href="" className="mr-auto tracking-tight">
<a
href="/privacy"
className="mr-auto tracking-tight"
aria-label="Privacy Policy"
>
Privacy Policy
</a>
</div>
<p className="font-medium">
Osvauld Security Solutions Pvt Limited @ 2024
Osvauld Security Solutions Pvt Limited @ 2025
</p>
</div>
</div>
Expand Down
7 changes: 3 additions & 4 deletions src/components/Hero.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { motion, AnimatePresence } from "framer-motion";
import DecryptedText from "./ui/DecryptedText";

export const Hero = () => {
const words = ["secrets", "notes", "pins", "credentials"];
const words = ["secrets", "notes", "pins", "data"];
const [currentWord, setCurrentWord] = useState("secrets");
const [wordIndex, setWordIndex] = useState(0);

Expand Down Expand Up @@ -102,10 +102,9 @@ export const Hero = () => {
</span>
</h1>
<div className="text-faqAnswer font-Inter font-light text-base md:text-lg xl:text-xl text-center pt-12 px-4 tracking-wide max-w-[99vw]">
Simplify how you manage sensitive data. <br /> Keep your passwords
Simplify how you manage data over internet. <br /> Keep your data
offline, but synced. With Osvauld,
<br className="hidden md:block" /> your secrets are safe,
accessible, and only yours.
<br className="hidden md:block" /> data exists only at you and your destination.
</div>
<div className="flex items-center justify-center gap-4 md:flex-row text-sm flex-wrap pt-12">
<a
Expand Down
Loading
Loading