Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
64 changes: 45 additions & 19 deletions app/components/layout/Footer.tsx
Original file line number Diff line number Diff line change
@@ -1,24 +1,50 @@
import Link from "next/link";

export default function Footer() {
return (
<footer className="border-t border-white/5 mt-20 py-10 text-center text-sm text-gray-500">
<p className="font-medium text-gray-400">
© {new Date().getFullYear()} DevPulse
</p>
<p className="mt-1">
A creation by{" "}
<span className="text-indigo-400 font-medium">Hall of Codes</span>
</p>
<p className="mt-1 text-gray-600">
Open source on{" "}
<a
href="https://github.com/hallofcodes/devpulse"
target="_blank"
rel="noopener noreferrer"
className="text-indigo-500 hover:text-indigo-400 underline-offset-4 hover:underline transition"
>
GitHub
</a>
</p>
<footer className="border-t border-white/5 mt-24">
<div className="max-w-7xl mx-auto px-6 py-10 text-sm text-gray-500">
<div className="flex flex-col md:flex-row items-center justify-between gap-4">
<div className="text-center md:text-left">
<p className="font-semibold text-gray-300">
© {new Date().getFullYear()} DevPulse
</p>
<p className="text-gray-500 mt-1">
Built by{" "}
<span className="text-indigo-400 font-medium">Hall of Codes</span>
</p>
</div>

<div className="flex items-center gap-6">
<Link
href="/legal/privacy"
className="hover:text-gray-300 transition"
>
Privacy
</Link>
<Link
href="/legal/terms"
className="hover:text-gray-300 transition"
>
Terms
</Link>
<a
href="https://github.com/hallofcodes/devpulse"
target="_blank"
rel="noopener noreferrer"
className="hover:text-gray-300 transition"
>
GitHub
</a>
</div>
</div>

<div className="my-6 border-t border-white/5" />

<div className="text-center text-xs text-gray-600">
<p>Open-source project maintained by the DevPulse team.</p>
</div>
</div>
</footer>
);
}
135 changes: 135 additions & 0 deletions app/legal/privacy/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
import { Metadata } from "next";

export const metadata: Metadata = {
title: "Privacy Policy - DevPulse",
description:
"Read our Privacy Policy to understand how we collect, use, and protect your information when you use DevPulse.",
};

export default function Privacy() {
return (
<div className="grid-bg p-6 max-w-3xl mx-auto text-sm leading-relaxed">
<h1 className="text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.1] text-transparent bg-clip-text bg-gradient-to-br from-white to-gray-400 mb-6">
Privacy Policy
</h1>

<p className="text-lg md:text-xl text-gray-400 max-w-2xl mx-auto lg:mx-0 leading-relaxed mb-10">
This Privacy Policy explains how <strong>DevPulse</strong>{" "}
(&quot;we&quot;, &quot;our&quot;, or &quot;us&quot;) collects, uses, and
protects your information when you use
<strong> devpulse-waka.vercel.app</strong>.{" "}
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
1. Information We Collect
</h2>

<h3 className="font-semibold mt-4">a. Automatically Collected Data</h3>
<p className="mb-2">
Our application is hosted on Vercel. Vercel may automatically collect
certain information such as:
</p>
<ul className="list-disc ml-6 mb-4">
<li>IP address</li>
<li>Browser type and version</li>
<li>Device information</li>
<li>Request logs and usage data</li>
</ul>

<h3 className="font-semibold mt-4">b. Authentication (Supabase)</h3>
<p className="mb-2">
We use Supabase as our authentication provider. When you sign up or log
in, we collect:
</p>
<ul className="list-disc ml-6 mb-4">
<li>Email address</li>
<li>Password</li>
</ul>
<p className="mb-4">
This information is securely processed and stored by Supabase to create
and manage your account. We do not directly store or have access to your
password in plain text.
</p>

<h3 className="font-semibold mt-4">c. WakaTime API Key</h3>
<p className="mb-4">
When you use DevPulse, you may provide your WakaTime API key. This key
is used solely to fetch your coding activity data from the WakaTime API
and generate statistics. We do not use this key for any other purpose.
</p>

<h3 className="font-semibold mt-4">d. GitHub OAuth Data</h3>
<p className="mb-2">
When you connect your GitHub account via OAuth2, we may access:
</p>
<ul className="list-disc ml-6 mb-4">
<li>Your name</li>
<li>Your email address</li>
</ul>
<p className="mb-4">
This information is used only to identify your account and personalize
your experience.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
2. How We Use Your Information
</h2>
<ul className="list-disc ml-6 mb-4">
<li>To authenticate users and manage accounts</li>
<li>To fetch and display your coding statistics</li>
<li>To personalize your experience</li>
<li>To improve the performance and reliability of the app</li>
</ul>

<h2 className="text-xl font-semibold mt-6 mb-2">
3. Third-Party Services
</h2>
<p className="mb-4">
We use third-party services that may collect and process data:
</p>
<ul className="list-disc ml-6 mb-4">
<li>Vercel (hosting and infrastructure)</li>
<li>Supabase (authentication and backend services)</li>
<li>Google Search Console (search performance monitoring)</li>
<li>WakaTime API (coding activity data)</li>
<li>GitHub OAuth (authentication and profile data)</li>
</ul>

<h2 className="text-xl font-semibold mt-6 mb-2">
4. Data Storage and Security
</h2>
<p className="mb-4">
We take reasonable measures to protect your information. Authentication
data is handled securely by Supabase. However, no method of transmission
over the internet is 100% secure.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">5. Data Sharing</h2>
<p className="mb-4">
We do not sell, trade, or rent your personal information. Data is only
shared with third-party services as necessary to operate the
application.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">6. Your Rights</h2>
<p className="mb-4">
You may choose not to provide certain information (such as your WakaTime
API key or GitHub access), but this may limit functionality.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
7. Changes to This Policy
</h2>
<p className="mb-4">
We may update this Privacy Policy from time to time. Changes will be
posted on this page.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">8. Contact</h2>
<p>
If you have any questions about this Privacy Policy, please contact us
through the project repository or application interface.
</p>
</div>
);
}
114 changes: 114 additions & 0 deletions app/legal/terms/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
import { Metadata } from "next";

export const metadata: Metadata = {
title: "Terms of Service - DevPulse",
description:
"Read our Terms of Service to understand the rules and guidelines for using DevPulse.",
};

export default function Terms() {
return (
<div className="grid-bg p-6 max-w-3xl mx-auto text-sm leading-relaxed">
<h1 className="text-5xl md:text-6xl lg:text-7xl font-extrabold tracking-tight leading-[1.1] text-transparent bg-clip-text bg-gradient-to-br from-white to-gray-400 mb-6">
Terms of Service
</h1>

<p className="text-lg md:text-xl text-gray-400 max-w-2xl mx-auto lg:mx-0 leading-relaxed mb-10">
These Terms of Service (&quot;Terms&quot;) govern your use of{" "}
<strong>DevPulse</strong>
(&quot;we&quot;, &quot;our&quot;, or &quot;us&quot;) available at{" "}
<strong>devpulse-waka.vercel.app</strong>. By using this service, you
agree to these Terms.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">1. Use of the Service</h2>
<p className="mb-4">
DevPulse provides tools to visualize and analyze your coding activity
using third-party integrations such as WakaTime and GitHub. You agree to
use the service only for lawful purposes and in compliance with all
applicable laws.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">2. Accounts</h2>
<p className="mb-2">
To use certain features, you may be required to create an account using
Supabase authentication. You agree to:
</p>
<ul className="list-disc ml-6 mb-4">
<li>Provide accurate and complete information</li>
<li>Maintain the security of your account credentials</li>
<li>Be responsible for all activity under your account</li>
</ul>

<h2 className="text-xl font-semibold mt-6 mb-2">
3. Third-Party Services
</h2>
<p className="mb-2">
DevPulse relies on third-party services, including:
</p>
<ul className="list-disc ml-6 mb-4">
<li>Vercel (hosting)</li>
<li>Supabase (authentication and backend)</li>
<li>WakaTime API (coding statistics)</li>
<li>GitHub OAuth (authentication and profile data)</li>
<li>Google Search Console (analytics)</li>
</ul>
<p className="mb-4">
We are not responsible for the availability, accuracy, or practices of
these third-party services.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
4. API Keys and Integrations
</h2>
<p className="mb-4">
You may provide a WakaTime API key to use certain features. You are
responsible for keeping your API key secure. We are not liable for any
misuse resulting from unauthorized access to your key.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">5. Data and Content</h2>
<p className="mb-4">
You retain ownership of your data. By using the service, you grant us
permission to process your data solely for the purpose of providing the
service’s features.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
6. Service Availability
</h2>
<p className="mb-4">
We do not guarantee that the service will be uninterrupted or
error-free. Features may change, be modified, or discontinued at any
time without notice.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">
7. Limitation of Liability
</h2>
<p className="mb-4">
DevPulse is provided "as is" without warranties of any kind. We are not
liable for any damages, including loss of data, arising from your use of
the service.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">8. Termination</h2>
<p className="mb-4">
We reserve the right to suspend or terminate your access to the service
at any time, without prior notice, if you violate these Terms.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">9. Changes to Terms</h2>
<p className="mb-4">
We may update these Terms from time to time. Continued use of the
service after changes means you accept the updated Terms.
</p>

<h2 className="text-xl font-semibold mt-6 mb-2">10. Contact</h2>
<p>
If you have any questions about these Terms, please contact us through
the project repository or application interface.
</p>
</div>
);
}
2 changes: 1 addition & 1 deletion app/lib/proxy/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export default async function Auth(req: NextRequest) {
} = await supabase.auth.getUser();
const { pathname } = req.nextUrl;

const protectedRoutes = ["/dashboard", "/logout"];
const protectedRoutes = ["/dashboard", "/update-password", "/logout"];
const isProtectedRoute = protectedRoutes.some((route) => {
const regex = new RegExp(`^${route}(/.*)?$`);
return regex.test(pathname);
Expand Down
Loading
Loading