feat(trust): SEO, legal docs, open source, federation polish
SEO & structured data: - layout: metadataBase, template titles, OG image, canonical URL, robots config - JSON-LD WebApplication/Site structured data on all pages - Removed twitter:card (no Twitter/X integration) - robots.ts: allow all, disallow /api/ /auth/ /profile/ /health/ - sitemap.ts: 14 routes with priority levels - opengraph-image.tsx: generated neon DegenFeed social card (1200x630) New pages: - /about: mission, Rug Munch Media LLC, open source, infrastructure - /faq: 15 questions - /legal: LLC notice, DMCA agent, DPO, governing law - /acceptable-use: 8 rules linked from Terms - /community-guidelines: 12 instance rules Legal improvements: - Privacy: added COPPA, GDPR rights, CCPA rights, Data Protection Officer - Terms: DMCA notice, age 16 (EU-friendly), Wyoming law, LLC attribution Open source: - LICENSE (MIT), CONTRIBUTING.md, SECURITY.md, CODEOWNERS, CODE_OF_CONDUCT.md - Footer: git.rugmunch.io + codeberg.org links
This commit is contained in:
parent
68783f3e6e
commit
2cb7336ccd
16 changed files with 848 additions and 43 deletions
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
|
|
@ -0,0 +1 @@
|
|||
* @cryptorugmunch
|
||||
70
CODE_OF_CONDUCT.md
Normal file
70
CODE_OF_CONDUCT.md
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment:
|
||||
|
||||
- Demonstrating empathy and kindness toward other people
|
||||
- Being respectful of differing opinions, viewpoints, and experiences
|
||||
- Giving and gracefully accepting constructive feedback
|
||||
- Accepting responsibility and apologizing to those affected by our mistakes
|
||||
- Focusing on what is best for the overall community
|
||||
|
||||
Examples of unacceptable behavior:
|
||||
|
||||
- The use of sexualized language or imagery, and sexual attention or advances
|
||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
- Public or private harassment
|
||||
- Publishing others' private information without explicit permission
|
||||
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
**admin@rugmunch.io**.
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly. All
|
||||
community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2026 Rug Munch Media LLC
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
66
SECURITY.md
Normal file
66
SECURITY.md
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
**Do NOT open a public issue for security bugs.**
|
||||
|
||||
Instead, send a detailed report to **security@degenfeed.xyz**.
|
||||
|
||||
We take all security reports seriously. Good-faith security researchers are protected under our safe harbor policy.
|
||||
|
||||
### What to include
|
||||
|
||||
- Description of the vulnerability
|
||||
- Steps to reproduce
|
||||
- Affected components and versions
|
||||
- Any proof-of-concept code (if available)
|
||||
- Your PGP public key for encrypted follow-up (optional)
|
||||
|
||||
### Response SLA
|
||||
|
||||
| Severity | Acknowledgment | Patch |
|
||||
|----------|---------------|-------|
|
||||
| Critical | 24 hours | 7 days |
|
||||
| High | 48 hours | 14 days |
|
||||
| Medium | 5 days | 30 days |
|
||||
| Low | Next release | Next release |
|
||||
|
||||
### Public key
|
||||
|
||||
A PGP key for `security@degenfeed.xyz` will be published at `/.well-known/security.txt`.
|
||||
|
||||
Currently, report via email without encryption. We will acknowledge within 48 hours.
|
||||
|
||||
## Supported Versions
|
||||
|
||||
| Version | Supported |
|
||||
|---------|-----------|
|
||||
| Latest release | YES |
|
||||
| All prior versions | NO |
|
||||
|
||||
Only the latest deployed version receives security patches.
|
||||
|
||||
## Scope
|
||||
|
||||
- `degenfeed-web` monorepo (all packages and apps)
|
||||
- Cloudflare Worker (`degenfeed-api`)
|
||||
- `social.degenfeed.xyz` (GotoSocial instance)
|
||||
- `degenfeed.xyz` (Cloudflare Pages)
|
||||
|
||||
Out of scope: third-party protocol APIs (Nostr relays, Farcaster hubs, Bluesky PDS, etc.).
|
||||
|
||||
## Safe Harbor
|
||||
|
||||
We will not pursue legal action against security researchers who:
|
||||
|
||||
- Make a good-faith effort to avoid privacy violations and data destruction
|
||||
- Give us reasonable time to fix the issue before disclosing
|
||||
- Do not exploit the vulnerability beyond what is necessary to demonstrate it
|
||||
|
||||
## Disclosure Policy
|
||||
|
||||
We follow coordinated disclosure. After a fix is deployed, we will:
|
||||
|
||||
1. Publish an advisory with CVE (if applicable)
|
||||
2. Credit the researcher (unless they prefer anonymity)
|
||||
3. Update this document with any new guidance
|
||||
86
apps/web/src/app/about/page.tsx
Normal file
86
apps/web/src/app/about/page.tsx
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'About — DegenFeed',
|
||||
};
|
||||
|
||||
export default function AboutPage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-2xl px-4 py-8 text-sm leading-relaxed text-gray-300">
|
||||
<h1 className="mb-6 text-2xl font-bold text-white">About DegenFeed</h1>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">1. What is DegenFeed?</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is a multi-protocol social aggregator for web3. See posts from Nostr, Farcaster,
|
||||
Lens, Bluesky, Mastodon, Threads, Reddit, and RSS — all in one unified feed. Browse the
|
||||
pulse of crypto social without jumping between platforms. No account needed.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">2. Mission</h2>
|
||||
<p className="mb-4">
|
||||
Make web3 social accessible to everyone. Aggregation without lock-in — read from any
|
||||
protocol, post to any protocol, own your identity. We believe in open protocols, not walled
|
||||
gardens. The future of social media is decentralized, and DegenFeed is your window into it.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">3. Who Built This</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is a product of{' '}
|
||||
<strong className="text-white">Rug Munch Media LLC</strong>, a Wyoming limited liability
|
||||
company. Built by crypto native engineers who live and breathe on-chain. This is not a VC-
|
||||
backed startup — it is an independent, self-funded project by people who actually use the
|
||||
protocols they build for.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">4. Open Source</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is licensed under the{' '}
|
||||
<strong className="text-white">GNU Affero General Public License v3.0 (AGPL-3.0)</strong>.
|
||||
Source code is available at{' '}
|
||||
<a
|
||||
href="https://git.rugmunch.io/RugMunchMedia/degenfeed-web"
|
||||
className="text-degen-400 underline"
|
||||
>
|
||||
git.rugmunch.io/RugMunchMedia/degenfeed-web
|
||||
</a>{' '}
|
||||
and mirrored at{' '}
|
||||
<a
|
||||
href="https://codeberg.org/degenfeed/degenfeed-web"
|
||||
className="text-degen-400 underline"
|
||||
>
|
||||
codeberg.org/degenfeed/degenfeed-web
|
||||
</a>
|
||||
. Contributions are welcome — submit pull requests, report bugs, or suggest features.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. Infrastructure</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is hosted on Cloudflare (Pages + Workers) for global edge performance. The social
|
||||
instance (social.degenfeed.xyz) runs GotoSocial on dedicated hardware. We support 8 protocol
|
||||
providers with zero tracking and no ads. Fast, clean, and private by design.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">6. Contact</h2>
|
||||
<ul className="mb-4 list-inside list-disc space-y-1">
|
||||
<li>
|
||||
General:{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
Legal:{' '}
|
||||
<a href="mailto:legal@rugmunch.io" className="text-degen-400 underline">
|
||||
legal@rugmunch.io
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
DMCA:{' '}
|
||||
<a href="mailto:dmca@degenfeed.xyz" className="text-degen-400 underline">
|
||||
dmca@degenfeed.xyz
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
81
apps/web/src/app/acceptable-use/page.tsx
Normal file
81
apps/web/src/app/acceptable-use/page.tsx
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Acceptable Use Policy — DegenFeed',
|
||||
};
|
||||
|
||||
export default function AcceptableUsePage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-2xl px-4 py-8 text-sm leading-relaxed text-gray-300">
|
||||
<h1 className="mb-6 text-2xl font-bold text-white">Acceptable Use Policy</h1>
|
||||
<p className="mb-4 text-gray-500">Last updated: July 2026</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">1. No Illegal Activities</h2>
|
||||
<p className="mb-4">
|
||||
You may not use DegenFeed to engage in, promote, or facilitate any activity that violates
|
||||
local, state, federal, or international law. This includes but is not limited to money
|
||||
laundering, sanctions evasion, unlicensed money transmission, and the sale of controlled
|
||||
substances.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">2. No Financial Scams</h2>
|
||||
<p className="mb-4">
|
||||
The following are strictly prohibited: pump-and-dump coordination, Ponzi or pyramid schemes,
|
||||
rug pull planning or promotion, fake token launches, phishing links, wallet drainers, fake
|
||||
airdrops, impersonation of projects or founders for financial gain, and any other
|
||||
activity designed to defraud or deceive users for monetary benefit.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">3. No Hate Speech</h2>
|
||||
<p className="mb-4">
|
||||
Harassment, hate speech, threats of violence, targeted abuse, doxxing, and impersonation are
|
||||
not tolerated. This includes attacks based on race, ethnicity, religion, gender, sexual
|
||||
orientation, disability, or any other protected characteristic. Impersonating other users,
|
||||
public figures, or projects is prohibited.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">4. No Spam</h2>
|
||||
<p className="mb-4">
|
||||
Mass posting, excessive self-promotion, link flooding, repetitive content, unsolicited
|
||||
commercial messages, and bot-driven activity are not allowed. DegenFeed is for genuine human
|
||||
interaction.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. No CSAM / Exploitation</h2>
|
||||
<p className="mb-4">
|
||||
Child sexual abuse material (CSAM) and any content that exploits minors is absolutely
|
||||
prohibited. We maintain a zero-tolerance policy. Any such content will be immediately
|
||||
removed, the account will be permanently banned, and the incident will be reported to the
|
||||
National Center for Missing & Exploited Children (NCMEC) and relevant law enforcement
|
||||
authorities.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">6. AI Disclosure</h2>
|
||||
<p className="mb-4">
|
||||
Content generated or substantially assisted by artificial intelligence must be clearly
|
||||
marked as such. Deepfakes, voice clones, or other synthetic media used for impersonation or
|
||||
deception are strictly prohibited. Transparency about AI use helps maintain trust in our
|
||||
community.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">7. Copyright</h2>
|
||||
<p className="mb-4">
|
||||
Respect intellectual property rights. Do not post content you do not own or have permission
|
||||
to share. If you believe your copyright has been infringed, follow our DMCA process by
|
||||
emailing{' '}
|
||||
<a href="mailto:dmca@degenfeed.xyz" className="text-degen-400 underline">
|
||||
dmca@degenfeed.xyz
|
||||
</a>{' '}
|
||||
with a complete takedown notice. We respond to valid DMCA notices within 48 hours.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">8. Enforcement</h2>
|
||||
<p>
|
||||
We reserve the right to suspend or ban accounts, remove content, limit access to features,
|
||||
and report violations to law enforcement or relevant authorities. We may also defederate
|
||||
from instances that violate this policy. Enforcement decisions are made at our sole
|
||||
discretion but are always applied in good faith to protect the community.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
117
apps/web/src/app/community-guidelines/page.tsx
Normal file
117
apps/web/src/app/community-guidelines/page.tsx
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Community Guidelines — DegenFeed',
|
||||
};
|
||||
|
||||
export default function CommunityGuidelinesPage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-2xl px-4 py-8 text-sm leading-relaxed text-gray-300">
|
||||
<h1 className="mb-2 text-2xl font-bold text-white">Community Guidelines</h1>
|
||||
<p className="mb-6 text-gray-500">Federated instance rules for social.degenfeed.xyz</p>
|
||||
|
||||
<ol className="mb-4 list-inside space-y-4">
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">Be Respectful</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
No harassment, hate speech, or personal attacks. Treat others with basic human decency.
|
||||
Disagreement is fine — being a jerk is not.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No Spam or Bots</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Genuine human interaction only. No automated accounts, crypto spam, link flooding, or
|
||||
repetitive self-promotion. Bots are not permitted without explicit admin approval.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No CSAM</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Zero tolerance for child sexual abuse material or any content exploiting minors.
|
||||
Immediate ban and report to NCMEC and law enforcement. No exceptions, no warnings.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No Financial Scams</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
No pump-and-dump coordination, rug pulls, fake ICOs, phishing links, wallet drainers, or
|
||||
any scheme designed to steal money or tokens. Share alpha, not scams.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No Doxxing</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Do not share private personal information about others without their explicit consent.
|
||||
This includes real names, addresses, phone numbers, private photos, and financial
|
||||
information.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No Impersonation</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Do not pretend to be someone else. This includes impersonating other users, public
|
||||
figures, projects, companies, or officials. Parody accounts must be clearly labeled as
|
||||
such.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">Disclose AI Content</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Mark AI-generated or AI-assisted posts clearly. Be honest about what you created versus
|
||||
what a model generated. No deepfakes used for impersonation or deception.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">Respect Copyright</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Do not post content you do not own or have permission to share. Follow DMCA procedures
|
||||
for takedown requests at{' '}
|
||||
<a href="mailto:dmca@degenfeed.xyz" className="text-degen-400 underline">
|
||||
dmca@degenfeed.xyz
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">English Primary</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
English is the main language of this instance, but all languages are welcome in their
|
||||
respective communities. Use content warnings and hashtags to help others filter.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">No Illegal Activities</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Comply with all applicable laws. This includes laws in your jurisdiction, the United
|
||||
States (where our servers are located), and the jurisdictions of federated instances you
|
||||
interact with.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">Mark Adult Content</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Use content warnings for NSFW material. Unmarked adult content will be removed. Illegal
|
||||
content will be reported. Keep the instance safe for all users.
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<h2 className="inline text-lg font-semibold text-white">Be a Good Fediverse Citizen</h2>
|
||||
<p className="mt-1 ml-5">
|
||||
Do not harass users on other instances, do not exploit federation to bypass blocks or
|
||||
bans, and do not use the instance as a launchpad for cross-instance spam campaigns.
|
||||
Respect the rules of federated instances you interact with.
|
||||
</p>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<p className="mt-6 text-gray-500">
|
||||
Violations may result in content removal, account suspension, or instance defederation.
|
||||
Reports:{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
95
apps/web/src/app/faq/page.tsx
Normal file
95
apps/web/src/app/faq/page.tsx
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'FAQ — DegenFeed',
|
||||
description:
|
||||
'Frequently asked questions about DegenFeed, the open-source web3 social aggregator.',
|
||||
};
|
||||
|
||||
const faqs = [
|
||||
{
|
||||
q: 'What is DegenFeed?',
|
||||
a: 'DegenFeed is an open-source multi-protocol social aggregator for web3. It displays posts from Nostr, Farcaster, Lens, Bluesky, Mastodon, Threads, Reddit, and RSS feeds in a single unified timeline. No account is needed to browse.',
|
||||
},
|
||||
{
|
||||
q: 'How does aggregation work?',
|
||||
a: 'We pull public posts from each protocol via their open APIs, normalize them to a common format, rank them by engagement and recency, and display them in your feed. Nothing is stored or archived beyond what is needed to serve feeds.',
|
||||
},
|
||||
{
|
||||
q: 'Do I need an account?',
|
||||
a: 'No. Browsing DegenFeed is completely free and requires no sign-up. Creating an account unlocks posting, tipping, cross-posting across protocols, and a free @degenfeed.xyz handle on the Fediverse.',
|
||||
},
|
||||
{
|
||||
q: 'Is DegenFeed open source?',
|
||||
a: 'Yes. DegenFeed is licensed under AGPL-3.0. The full source code is available on git.rugmunch.io and codeberg.org. Contributions are welcome — see CONTRIBUTING.md for guidelines.',
|
||||
},
|
||||
{
|
||||
q: 'What is the premium tier?',
|
||||
a: 'Premium ($5/mo) adds advanced filtering, custom feeds, noise reduction, and priority support. Creator tier ($15/mo) unlocks analytics, cross-posting, and post scheduling.',
|
||||
},
|
||||
{
|
||||
q: 'How do I get a @degenfeed.xyz handle?',
|
||||
a: 'Visit social.degenfeed.xyz, connect your wallet, and request an account with a brief reason for joining. Approvals are usually processed within 24 hours. Your handle works across the entire Fediverse via ActivityPub.',
|
||||
},
|
||||
{
|
||||
q: 'How does federation work?',
|
||||
a: 'DegenFeed runs a GotoSocial instance at social.degenfeed.xyz that federates via ActivityPub. This means your @degenfeed.xyz account can follow and be followed by users on Mastodon, Lemmy, Pixelfed, and other Fediverse platforms.',
|
||||
},
|
||||
{
|
||||
q: "What is ActivityPub?",
|
||||
a: 'ActivityPub is a W3C standard for decentralized social networking. It powers Mastodon, Lemmy, Pixelfed, PeerTube, GotoSocial, and millions of federated accounts. It is the protocol that makes the Fediverse work without a central server.',
|
||||
},
|
||||
{
|
||||
q: 'Can I post from DegenFeed?',
|
||||
a: 'Yes. Connect your accounts (Nostr, Bluesky, Mastodon, Farcaster, Lens) and use the DegenFeed composer. Posts are sent directly to your chosen protocol. You can cross-post to multiple protocols simultaneously with a Creator subscription.',
|
||||
},
|
||||
{
|
||||
q: 'What wallets are supported?',
|
||||
a: 'Solana wallets (Phantom, Backpack, Solflare) and EVM wallets (MetaMask, Rainbow, WalletConnect). Wallets are used for sign-in and for tipping creators.',
|
||||
},
|
||||
{
|
||||
q: 'How do tips work?',
|
||||
a: 'Tip ETH, SOL, or USDC directly to any post. Tips go directly to the creator\'s wallet with no intermediary. Lightning Network support is in development.',
|
||||
},
|
||||
{
|
||||
q: 'Is my data sold?',
|
||||
a: 'No. DegenFeed does not sell data, does not run ads, and does not track users beyond what is needed to serve feeds. Premium subscriptions fund development.',
|
||||
},
|
||||
{
|
||||
q: 'How do I delete my account?',
|
||||
a: 'Data deletion is available via /api/account/delete. For GotoSocial accounts, manage your account at social.degenfeed.xyz.',
|
||||
},
|
||||
{
|
||||
q: 'Is there an RSS feed?',
|
||||
a: 'Yes. Subscribe to /api/feed/rss.xml in your RSS reader to get DegenFeed\'s top posts. Atom format is also available at /api/feed/atom.xml.',
|
||||
},
|
||||
{
|
||||
q: 'How do I report content?',
|
||||
a: 'Use the report button on any post, or email admin@rugmunch.io. For copyright concerns, contact dmca@degenfeed.xyz.',
|
||||
},
|
||||
];
|
||||
|
||||
export default function FAQPage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-2xl px-4 py-8 text-sm leading-relaxed text-gray-300">
|
||||
<h1 className="mb-6 text-2xl font-bold text-white">Frequently Asked Questions</h1>
|
||||
|
||||
<div className="space-y-6">
|
||||
{faqs.map((faq, i) => (
|
||||
<div key={i}>
|
||||
<h2 className="mb-1 text-base font-semibold text-white">{faq.q}</h2>
|
||||
<p>{faq.a}</p>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
<p className="mt-8 border-t border-gray-800 pt-6 text-gray-500">
|
||||
Don't see your question? Reach out to{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -10,22 +10,38 @@ import { Web3Provider } from '../components/Web3Provider';
|
|||
|
||||
export const metadata: Metadata = {
|
||||
manifest: '/manifest.json',
|
||||
title: 'DegenFeed — The social feed of web3',
|
||||
metadataBase: new URL('https://degenfeed.xyz'),
|
||||
title: {
|
||||
default: 'DegenFeed — The social feed of web3',
|
||||
template: '%s — DegenFeed',
|
||||
},
|
||||
description:
|
||||
'See every network. Zero sign-ups. DegenFeed aggregates Nostr, Farcaster, Lens, Bluesky, Threads, Reddit, and RSS into one window.',
|
||||
'See every network. Zero sign-ups. DegenFeed aggregates Nostr, Farcaster, Lens, Bluesky, Mastodon, Threads, Reddit, and RSS into one window.',
|
||||
openGraph: {
|
||||
title: 'DegenFeed — The social feed of web3',
|
||||
description:
|
||||
'See every network. Zero sign-ups. Nostr, Farcaster, Lens, Bluesky, Threads, Reddit, RSS in one window.',
|
||||
'See every network. Zero sign-ups. Nostr, Farcaster, Lens, Bluesky, Mastodon, Threads, Reddit, RSS in one window.',
|
||||
url: 'https://degenfeed.xyz',
|
||||
siteName: 'DegenFeed',
|
||||
type: 'website',
|
||||
images: [
|
||||
{
|
||||
url: '/og-image.png',
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: 'DegenFeed — The social feed of web3',
|
||||
},
|
||||
],
|
||||
},
|
||||
twitter: {
|
||||
card: 'summary_large_image',
|
||||
title: 'DegenFeed — The social feed of web3',
|
||||
description:
|
||||
'See every network. Zero sign-ups. Nostr, Farcaster, Lens, Bluesky, Threads, Reddit, RSS in one window.',
|
||||
robots: {
|
||||
index: true,
|
||||
follow: true,
|
||||
'max-image-preview': 'large',
|
||||
'max-snippet': -1,
|
||||
'max-video-preview': -1,
|
||||
},
|
||||
alternates: {
|
||||
canonical: 'https://degenfeed.xyz',
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -49,6 +65,31 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|||
id="sw-register"
|
||||
strategy="afterInteractive"
|
||||
>{`if('serviceWorker' in navigator){navigator.serviceWorker.register('/sw.js').catch(()=>{})}`}</Script>
|
||||
<script
|
||||
type="application/ld+json"
|
||||
dangerouslySetInnerHTML={{
|
||||
__html: JSON.stringify({
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'WebApplication',
|
||||
name: 'DegenFeed',
|
||||
url: 'https://degenfeed.xyz',
|
||||
description:
|
||||
'Open-source multi-protocol social aggregator for web3. Nostr, Farcaster, Lens, Bluesky, Mastodon, Threads, Reddit, RSS in one feed.',
|
||||
applicationCategory: 'SocialNetworkingApplication',
|
||||
operatingSystem: 'Web',
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
price: '0',
|
||||
priceCurrency: 'USD',
|
||||
},
|
||||
author: {
|
||||
'@type': 'Organization',
|
||||
name: 'Rug Munch Media LLC',
|
||||
url: 'https://degenfeed.xyz',
|
||||
},
|
||||
}),
|
||||
}}
|
||||
/>
|
||||
<SolanaProvider>
|
||||
<Web3Provider>
|
||||
<ToastProvider>
|
||||
|
|
|
|||
68
apps/web/src/app/legal/page.tsx
Normal file
68
apps/web/src/app/legal/page.tsx
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Legal Notice — DegenFeed',
|
||||
description: 'Legal notice and company information for DegenFeed, operated by Rug Munch Media LLC.',
|
||||
};
|
||||
|
||||
export default function LegalPage() {
|
||||
return (
|
||||
<div className="mx-auto max-w-2xl px-4 py-8 text-sm leading-relaxed text-gray-300">
|
||||
<h1 className="mb-2 text-2xl font-bold text-white">Legal Notice</h1>
|
||||
<p className="mb-8 text-lg text-degen-400">Rug Munch Media LLC</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Company</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is a product of Rug Munch Media LLC, a Wyoming limited liability company.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Registered Office</h2>
|
||||
<p className="mb-4">Registered in the State of Wyoming, United States of America.</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Contact</h2>
|
||||
<ul className="mb-4 space-y-1">
|
||||
<li>
|
||||
General inquiries:{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
Legal / law enforcement:{' '}
|
||||
<a href="mailto:legal@rugmunch.io" className="text-degen-400 underline">
|
||||
legal@rugmunch.io
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">DMCA Agent</h2>
|
||||
<p className="mb-4">
|
||||
For copyright-related takedown requests:{' '}
|
||||
<a href="mailto:dmca@degenfeed.xyz" className="text-degen-400 underline">
|
||||
dmca@degenfeed.xyz
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Data Protection Officer</h2>
|
||||
<p className="mb-4">
|
||||
For GDPR and data privacy inquiries:{' '}
|
||||
<a href="mailto:legal@rugmunch.io" className="text-degen-400 underline">
|
||||
legal@rugmunch.io
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Disclaimer</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is provided “as is” without warranty of any kind. DegenFeed is not a
|
||||
financial services platform. Nothing on DegenFeed constitutes financial advice. All
|
||||
trademarks and registered trademarks are the property of their respective owners.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">Governing Law</h2>
|
||||
<p className="mb-4">
|
||||
These terms and your use of DegenFeed are governed by the laws of the State of Wyoming,
|
||||
United States, without regard to conflict of law principles.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
81
apps/web/src/app/opengraph-image.tsx
Normal file
81
apps/web/src/app/opengraph-image.tsx
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
import { ImageResponse } from 'next/og';
|
||||
|
||||
export const runtime = 'edge';
|
||||
|
||||
export const alt = 'DegenFeed — The social feed of web3';
|
||||
export const size = { width: 1200, height: 630 };
|
||||
|
||||
export const contentType = 'image/png';
|
||||
|
||||
export default function Image() {
|
||||
return new ImageResponse(
|
||||
(
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column',
|
||||
alignItems: 'center',
|
||||
justifyContent: 'center',
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
background: 'linear-gradient(135deg, #000000 0%, #0a0f0a 50%, #000000 100%)',
|
||||
fontFamily: 'Inter',
|
||||
}}
|
||||
>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
position: 'absolute',
|
||||
top: 0,
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
opacity: 0.03,
|
||||
backgroundImage:
|
||||
'radial-gradient(circle at 30% 50%, #00ff41 0%, transparent 60%), radial-gradient(circle at 70% 50%, #00ff41 0%, transparent 60%)',
|
||||
}}
|
||||
/>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
fontSize: 96,
|
||||
fontWeight: 900,
|
||||
color: '#00ff41',
|
||||
letterSpacing: '-0.03em',
|
||||
textShadow: '0 0 80px rgba(0, 255, 65, 0.3), 0 0 160px rgba(0, 255, 65, 0.15)',
|
||||
marginBottom: 24,
|
||||
}}
|
||||
>
|
||||
DegenFeed
|
||||
</div>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
fontSize: 32,
|
||||
fontWeight: 500,
|
||||
color: '#9ca3af',
|
||||
marginBottom: 80,
|
||||
}}
|
||||
>
|
||||
The social feed of web3
|
||||
</div>
|
||||
<div
|
||||
style={{
|
||||
display: 'flex',
|
||||
position: 'absolute',
|
||||
bottom: 60,
|
||||
left: 0,
|
||||
right: 0,
|
||||
justifyContent: 'center',
|
||||
fontSize: 24,
|
||||
fontWeight: 400,
|
||||
color: '#4b5563',
|
||||
}}
|
||||
>
|
||||
degenfeed.xyz · Open source, zero sign-ups
|
||||
</div>
|
||||
</div>
|
||||
),
|
||||
{ ...size },
|
||||
);
|
||||
}
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Privacy Policy — DegenFeed',
|
||||
title: 'Privacy Policy',
|
||||
description: 'Privacy policy for DegenFeed, operated by Rug Munch Media LLC. No tracking, no ads, no data sales.',
|
||||
};
|
||||
|
||||
export default function PrivacyPage() {
|
||||
|
|
@ -56,15 +57,51 @@ export default function PrivacyPage() {
|
|||
<li>All data is stored in Cloudflare KV. Deletion is immediate and permanent.</li>
|
||||
</ul>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. Third Parties</h2>
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. GDPR Rights (EU/EEA Users)</h2>
|
||||
<p className="mb-4">
|
||||
If you are in the EU or EEA, you have the right to access, rectify, delete, and port your
|
||||
data. To exercise these rights, contact{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
. Our Data Protection Officer can be reached at{' '}
|
||||
<a href="mailto:legal@rugmunch.io" className="text-degen-400 underline">
|
||||
legal@rugmunch.io
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">6. CCPA Rights (California Users)</h2>
|
||||
<p className="mb-4">
|
||||
California residents have the right to know what personal data we collect, request deletion,
|
||||
and opt out of data sales. DegenFeed does not sell personal data. To exercise CCPA rights,
|
||||
email{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">7. COPPA Compliance</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed does not knowingly collect personal information from children under 13. If you
|
||||
believe a child has provided us with personal data, contact{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>{' '}
|
||||
and we will delete it promptly.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">8. Third Parties</h2>
|
||||
<p className="mb-4">
|
||||
We use Cloudflare (infrastructure) and Plausible (anonymous analytics). No ad networks, no
|
||||
trackers, no data brokers.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">6. Contact</h2>
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">9. Contact</h2>
|
||||
<p>
|
||||
Questions? Email{' '}
|
||||
DegenFeed is operated by Rug Munch Media LLC, a Wyoming limited liability company. For
|
||||
privacy questions, contact{' '}
|
||||
<a href="mailto:admin@rugmunch.io" className="text-degen-400 underline">
|
||||
admin@rugmunch.io
|
||||
</a>
|
||||
|
|
|
|||
|
|
@ -2,11 +2,13 @@ import type { MetadataRoute } from 'next';
|
|||
|
||||
export default function robots(): MetadataRoute.Robots {
|
||||
return {
|
||||
rules: {
|
||||
userAgent: '*',
|
||||
allow: '/',
|
||||
disallow: ['/api/', '/auth/'],
|
||||
},
|
||||
sitemap: 'https://app.degenfeed.xyz/sitemap.xml',
|
||||
rules: [
|
||||
{
|
||||
userAgent: '*',
|
||||
allow: '/',
|
||||
disallow: ['/api/', '/auth/', '/profile/', '/health'],
|
||||
},
|
||||
],
|
||||
sitemap: 'https://degenfeed.xyz/sitemap.xml',
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,24 @@
|
|||
import type { MetadataRoute } from 'next';
|
||||
|
||||
export const runtime = 'edge';
|
||||
|
||||
export default function sitemap(): MetadataRoute.Sitemap {
|
||||
const base = 'https://app.degenfeed.xyz';
|
||||
const baseUrl = 'https://degenfeed.xyz';
|
||||
|
||||
const staticPaths = [
|
||||
{ url: `${base}/feed`, priority: 1.0, changeFrequency: 'always' as const },
|
||||
{ url: `${base}/home`, priority: 0.9, changeFrequency: 'daily' as const },
|
||||
{ url: `${base}/news`, priority: 0.8, changeFrequency: 'hourly' as const },
|
||||
{ url: `${base}/newsletter`, priority: 0.7, changeFrequency: 'daily' as const },
|
||||
{ url: `${base}/status`, priority: 0.5, changeFrequency: 'hourly' as const },
|
||||
{ url: `${base}/premium`, priority: 0.4, changeFrequency: 'weekly' as const },
|
||||
{ url: `${base}/profile`, priority: 0.4, changeFrequency: 'weekly' as const },
|
||||
{ url: `${base}/privacy`, priority: 0.2, changeFrequency: 'monthly' as const },
|
||||
{ url: `${base}/terms`, priority: 0.2, changeFrequency: 'monthly' as const },
|
||||
const staticRoutes = [
|
||||
{ url: baseUrl, lastModified: new Date(), changeFrequency: 'hourly' as const, priority: 1 },
|
||||
{ url: `${baseUrl}/feed`, lastModified: new Date(), changeFrequency: 'hourly' as const, priority: 0.9 },
|
||||
{ url: `${baseUrl}/news`, lastModified: new Date(), changeFrequency: 'hourly' as const, priority: 0.9 },
|
||||
{ url: `${baseUrl}/home`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 0.8 },
|
||||
{ url: `${baseUrl}/discover`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 0.7 },
|
||||
{ url: `${baseUrl}/newsletter`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.7 },
|
||||
{ url: `${baseUrl}/premium`, lastModified: new Date(), changeFrequency: 'weekly' as const, priority: 0.6 },
|
||||
{ url: `${baseUrl}/about`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.5 },
|
||||
{ url: `${baseUrl}/faq`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.5 },
|
||||
{ url: `${baseUrl}/privacy`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||
{ url: `${baseUrl}/terms`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||
{ url: `${baseUrl}/community-guidelines`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||
{ url: `${baseUrl}/acceptable-use`, lastModified: new Date(), changeFrequency: 'monthly' as const, priority: 0.3 },
|
||||
{ url: `${baseUrl}/status`, lastModified: new Date(), changeFrequency: 'daily' as const, priority: 0.4 },
|
||||
];
|
||||
|
||||
return staticPaths.map((p) => ({
|
||||
url: p.url,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: p.changeFrequency,
|
||||
priority: p.priority,
|
||||
}));
|
||||
return staticRoutes;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = { title: 'Terms of Service — DegenFeed' };
|
||||
export const metadata: Metadata = {
|
||||
title: 'Terms of Service',
|
||||
description: 'Terms of Service for DegenFeed, operated by Rug Munch Media LLC, a Wyoming limited liability company.',
|
||||
};
|
||||
|
||||
export default function TermsPage() {
|
||||
return (
|
||||
|
|
@ -15,7 +18,7 @@ export default function TermsPage() {
|
|||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">2. Eligibility</h2>
|
||||
<p className="mb-4">
|
||||
You must be at least 13 years old. If you are under 18, you need parental consent.
|
||||
You must be at least 16 years old. If you are under 18, you need parental consent.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">3. Your Content</h2>
|
||||
|
|
@ -36,7 +39,18 @@ export default function TermsPage() {
|
|||
.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. Disclaimer</h2>
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">5. DMCA Notice</h2>
|
||||
<p className="mb-4">
|
||||
If you believe content on DegenFeed infringes your copyright, send a DMCA notice to{' '}
|
||||
<a href="mailto:dmca@degenfeed.xyz" className="text-degen-400 underline">
|
||||
dmca@degenfeed.xyz
|
||||
</a>{' '}
|
||||
with: identification of the copyrighted work, the infringing URL, a statement of good faith
|
||||
belief, your contact information, and a physical or electronic signature. We respond to
|
||||
valid DMCA notices within 48 hours.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">6. Disclaimer</h2>
|
||||
<p className="mb-4">
|
||||
DegenFeed is provided “as is” without warranty. We are not responsible for
|
||||
content posted by third parties on connected networks. Content may include financial
|
||||
|
|
@ -49,8 +63,17 @@ export default function TermsPage() {
|
|||
any indirect, incidental, or consequential damages arising from your use of the service.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">7. Changes</h2>
|
||||
<p>We may update these terms. Continued use after changes constitutes acceptance.</p>
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">7. Governing Law</h2>
|
||||
<p className="mb-4">
|
||||
These terms are governed by the laws of the State of Wyoming, United States, without regard
|
||||
to conflict of law principles.
|
||||
</p>
|
||||
|
||||
<h2 className="mb-2 text-lg font-semibold text-white">8. Changes</h2>
|
||||
<p>
|
||||
We may update these terms. Continued use after changes constitutes acceptance. DegenFeed is
|
||||
operated by Rug Munch Media LLC, a Wyoming limited liability company.
|
||||
</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -238,7 +238,25 @@ export function Shell({ children }: { children: React.ReactNode }) {
|
|||
</a>
|
||||
</div>
|
||||
<p className="text-xs text-gray-600">
|
||||
© {new Date().getFullYear()} DegenFeed. No account required.
|
||||
© {new Date().getFullYear()} DegenFeed — a Rug Munch Media LLC product. No account required. Open source on{' '}
|
||||
<a
|
||||
href="https://git.rugmunch.io/RugMunchMedia/degenfeed-web"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-gray-500 underline transition-colors hover:text-gray-400"
|
||||
>
|
||||
git.rugmunch.io
|
||||
</a>{' '}
|
||||
and{' '}
|
||||
<a
|
||||
href="https://codeberg.org/degenfeed/degenfeed-web"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-gray-500 underline transition-colors hover:text-gray-400"
|
||||
>
|
||||
codeberg.org
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue