-
Notifications
You must be signed in to change notification settings - Fork 3
feat: legal pages #470
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: legal pages #470
Changes from all commits
0d9160c
3726fc5
6b69f5b
21fcd8f
ed06102
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,111 @@ | ||
|
|
||
| import { Column, List, Paragraph, Title } from '@maskingtech/designsystem'; | ||
|
|
||
| export default function Feature() | ||
| { | ||
| return <Column gap='large'> | ||
|
|
||
|
|
||
| <Column gap='medium'> | ||
| <Title size='large'>Privacy Policy</Title> | ||
| <Paragraph> | ||
| Last updated: February 3, 2026 | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>1. Introduction</Title> | ||
| <Paragraph> | ||
| This Privacy Policy explains how Comify processes personal data in accordance with the General Data Protection Regulation (GDPR). | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>2. Data Controller</Title> | ||
| <Paragraph> | ||
| The data controller is Masking Technology, Noordwijk, the Netherlands. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>3. Personal Data We Process</Title> | ||
| <Paragraph> | ||
| We process the following personal data: | ||
| </Paragraph> | ||
| <List type='unordered'> | ||
| <List.Item>Full name and nickname</List.Item> | ||
| <List.Item>Email address</List.Item> | ||
| <List.Item>Account registration date</List.Item> | ||
| <List.Item>Content you create (comics, reactions)</List.Item> | ||
| <List.Item>IP address and basic technical data for security purposes</List.Item> | ||
| </List> | ||
| <Paragraph> | ||
| We do not use third-party advertising cookies. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>4. Legal Bases for Processing</Title> | ||
| <Paragraph> | ||
| We process personal data based on: | ||
| </Paragraph> | ||
| <List type='unordered'> | ||
| <List.Item>Performance of a contract (providing the Comify service)</List.Item> | ||
| <List.Item>Legitimate interests (security, platform improvement)</List.Item> | ||
| <List.Item>Legal obligations where applicable</List.Item> | ||
| </List> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>5. Use of Social Login Providers</Title> | ||
| <Paragraph> | ||
| If you choose to register or log in using a third-party provider, we receive limited information necessary to create and authenticate your Account. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>6. Cookies</Title> | ||
| <Paragraph> | ||
| Comify uses only essential cookies required for authentication and basic functionality. No tracking or advertising cookies are used. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>7. Data Retention</Title> | ||
| <Paragraph> | ||
| We retain personal data for as long as your Account is active or as necessary to comply with legal obligations. IP addresses are retained only as long as required for security purposes. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>8. Your Rights</Title> | ||
| <Paragraph> | ||
| You have the right to: | ||
| </Paragraph> | ||
| <List type='unordered'> | ||
| <List.Item>Access your personal data</List.Item> | ||
| <List.Item>Correct inaccurate data</List.Item> | ||
| <List.Item>Request deletion of your data</List.Item> | ||
| <List.Item>Restrict or object to processing</List.Item> | ||
| <List.Item>Receive your data in a portable format</List.Item> | ||
| <List.Item>Lodge a complaint with a supervisory authority</List.Item> | ||
| </List> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>9. Security Measures</Title> | ||
| <Paragraph> | ||
| We take appropriate technical and organizational measures to protect personal data, including encrypted password storage. | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| <Column gap='medium'> | ||
| <Title size='medium'>10. Contact</Title> | ||
| <Paragraph> | ||
| For privacy-related questions or Account deletion requests, contact: | ||
| Email: comify@masking.tech | ||
| </Paragraph> | ||
| </Column> | ||
|
|
||
| </Column>; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,14 +7,21 @@ import Home from './Home'; | |
| import Login from './Login'; | ||
| import Identify from './Identify'; | ||
| import Logout from './Logout'; | ||
| import Terms from './Terms'; | ||
| import Privacy from './Privacy'; | ||
|
|
||
| export const publicRoutes = <Route> | ||
| export const legalRoutes = <Route> | ||
| <Route path='/terms' element={<Terms />} /> | ||
| <Route path='/privacy' element={<Privacy />} /> | ||
| <Route path='*' element={<NotFound />} /> | ||
| </Route>; | ||
|
Comment on lines
+13
to
+17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Find router composition points and route group usage
# Search for where legalRoutes, appRoutes, guestRoutes are used/imported
echo "=== Route group usage outside Routes.tsx ==="
rg -n 'legalRoutes|appRoutes|guestRoutes' --type=tsx --type=ts -g '!**/Routes.tsx' | head -50
echo -e "\n=== Checking for catch-all routes ==="
rg -n "path=.*[\'\"]\\*[\'\"]" --type=tsx --type=ts
echo -e "\n=== Checking for NotFound usage ==="
rg -n 'NotFound' --type=tsx --type=ts
echo -e "\n=== Look for Router/Routes composition ==="
rg -n 'BrowserRouter|RouterProvider|<Routes' --type=tsx --type=ts -C3Repository: MaskingTechnology/comify Length of output: 427 🏁 Script executed: #!/bin/bash
# Find router composition and route usage with corrected syntax
# First, check the file structure
echo "=== Looking for relevant files ==="
find . -type f -name "*.tsx" -o -name "*.ts" | grep -E '(Route|route|app)' | head -20
echo -e "\n=== Route group usage (legalRoutes, appRoutes, guestRoutes) ==="
rg -n 'legalRoutes|appRoutes|guestRoutes' -g '!Routes.tsx' | head -50
echo -e "\n=== Catch-all routes with asterisk ==="
rg -n "path='\\*'|path=\"\\*\"" | head -20
echo -e "\n=== NotFound component usage ==="
rg -n 'NotFound' | head -30
echo -e "\n=== Routes.tsx full content ==="
cat src/apps/social/app/application/Routes.tsxRepository: MaskingTechnology/comify Length of output: 5302 🏁 Script executed: #!/bin/bash
# Check App.tsx for route composition
echo "=== App.tsx content ==="
cat src/apps/social/app/App.tsx
echo -e "\n=== Check for LegalLayout or layout composition ==="
rg -n 'LegalLayout|Layout' src/apps/social/app/ -A 2 -B 2 | head -40Repository: MaskingTechnology/comify Length of output: 3356 🏁 Script executed: #!/bin/bash
# Get the full Routes.tsx file at the app level
echo "=== Full Routes.tsx (app level) ==="
cat src/apps/social/app/Routes.tsx
echo -e "\n=== Check ProtectedRoute to understand its behavior ==="
cat src/apps/social/app/application/ProtectedRoute.tsxRepository: MaskingTechnology/comify Length of output: 1712 🏁 Script executed: #!/bin/bash
# Final check: confirm no other global catch-all exists
echo "=== Verify legalRoutes is the only global catch-all at app level ==="
cat src/apps/social/app/Routes.tsx | grep -n "path=.*\\*"
echo -e "\n=== Verify feature routes each have their own catch-alls ==="
rg -l "path.*\\*" --type ts --type tsx | grep -E '(account|timeline|profile|explore|notification)/Routes'Repository: MaskingTechnology/comify Length of output: 243 🏁 Script executed: #!/bin/bash
# Check a couple feature route files to confirm the pattern
echo "=== Check account/Routes.tsx ==="
cat src/apps/social/app/account/Routes.tsx | head -15
echo -e "\n=== Check timeline/Routes.tsx ==="
cat src/apps/social/app/timeline/Routes.tsx | head -15Repository: MaskingTechnology/comify Length of output: 894 Remove the catch-all from The catch-all Note: 🤖 Prompt for AI Agents |
||
|
|
||
| export const guestRoutes = <Route> | ||
| <Route path='/' element={<Home />} /> | ||
| <Route path='/login' element={<Login />} /> | ||
| <Route path='/identify' element={<Identify />} /> | ||
| <Route path='*' element={<NotFound />} /> | ||
| </Route>; | ||
|
|
||
| export const protectedRoutes = <Route> | ||
| export const appRoutes = <Route> | ||
| <Route path='/logout' element={<Logout />} /> | ||
| </Route>; | ||
| Original file line number | Diff line number | Diff line change | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,147 @@ | ||||||||||
|
|
||||||||||
| import { Column, List, Paragraph, Text, Title } from '@maskingtech/designsystem'; | ||||||||||
|
|
||||||||||
| export default function Feature() | ||||||||||
| { | ||||||||||
|
Comment on lines
+4
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Rename the component function from Both ♻️ Proposed rename-export default function Feature()
+export default function Terms()Apply the equivalent rename ( 📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||
| return <Column gap='large'> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='large'>Terms of Use</Title> | ||||||||||
| <Paragraph> | ||||||||||
| Last updated: February 3, 2026 | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>1. About Comify</Title> | ||||||||||
| <Paragraph> | ||||||||||
| Comify is an online, open-source, comic-based social media platform operated by Masking Technology, a company registered in the Netherlands and listed in the Dutch Trade Register (Handelsregister) under Chamber of Commerce number 81340982. | ||||||||||
| These Terms of Use govern your access to and use of the Comify platform. By creating an account or using Comify, you agree to these Terms of Use. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>2. Definitions</Title> | ||||||||||
| <List type='unordered'> | ||||||||||
| <List.Item> | ||||||||||
| <Text weight='bold' value='Comify:' /> The Comify platform, website, and related services. | ||||||||||
| </List.Item> | ||||||||||
| <List.Item> | ||||||||||
| <Text weight='bold' value='User:' /> Any natural person who creates an account on Comify. | ||||||||||
| </List.Item> | ||||||||||
| <List.Item> | ||||||||||
| <Text weight='bold' value='Account:' /> The personal account created by a User to access Comify. | ||||||||||
| </List.Item> | ||||||||||
| <List.Item> | ||||||||||
| <Text weight='bold' value='Content:' /> Any comics, images, text, reactions, or other materials uploaded or created by Users. | ||||||||||
| </List.Item> | ||||||||||
| <List.Item> | ||||||||||
| <Text weight='bold' value='We / Us:' /> Masking Technology, operating Comify. | ||||||||||
| </List.Item> | ||||||||||
| </List> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>3. Eligibility and Account Registration</Title> | ||||||||||
| <List type='ordered'> | ||||||||||
| <List.Item>You must be at least 16 years old to use Comify.</List.Item> | ||||||||||
| <List.Item>To create an account, you must provide accurate and complete information, including your full name, nickname, and email address.</List.Item> | ||||||||||
| <List.Item>Accounts may be created using a registration form or supported third-party social login providers.</List.Item> | ||||||||||
| <List.Item>Each User may create only one Account.</List.Item> | ||||||||||
| <List.Item>You are responsible for keeping your login credentials confidential. All activity performed through your Account is your responsibility.</List.Item> | ||||||||||
| </List> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>4. Platform Functionality</Title> | ||||||||||
| <Paragraph> | ||||||||||
| Comify allows registered Users to: | ||||||||||
| </Paragraph> | ||||||||||
| <List type='ordered'> | ||||||||||
| <List.Item>View comics created by other Users through the Timeline and Explore pages.</List.Item> | ||||||||||
| <List.Item>Follow other Users and view their comics in a Following feed.</List.Item> | ||||||||||
| <List.Item>Create comics using the built-in editor and publish them to the platform.</List.Item> | ||||||||||
| <List.Item>Like comics and reactions.</List.Item> | ||||||||||
| <List.Item>Add reactions (comic-based or text-based) to comics and reactions.</List.Item> | ||||||||||
| <List.Item>View notifications related to follows, likes, and reactions.</List.Item> | ||||||||||
| </List> | ||||||||||
| <Paragraph> | ||||||||||
| All Content published on Comify is visible to registered Users only. Content is not accessible to non-registered visitors. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>5. User Content and Intellectual Property</Title> | ||||||||||
| <List type='ordered'> | ||||||||||
| <List.Item>You retain all intellectual property rights to the Content you create and publish on Comify.</List.Item> | ||||||||||
| <List.Item>By publishing Content on Comify, you grant us a non-exclusive, worldwide, royalty-free license to host, store, display, reproduce, and distribute your Content solely for the purpose of operating, improving, and showcasing the Comify platform.</List.Item> | ||||||||||
| <List.Item>We will not sell your Content or use it for third-party advertising.</List.Item> | ||||||||||
| <List.Item>You confirm that you have the necessary rights to publish the Content you upload and that it does not infringe the rights of third parties.</List.Item> | ||||||||||
| </List> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>6. Prohibited Use</Title> | ||||||||||
| <Paragraph> | ||||||||||
| You may not use Comify to: | ||||||||||
| </Paragraph> | ||||||||||
| <List type='ordered'> | ||||||||||
| <List.Item>Violate any applicable laws or regulations.</List.Item> | ||||||||||
| <List.Item>Upload Content that is unlawful, hateful, threatening, discriminatory, pornographic, or incites violence.</List.Item> | ||||||||||
| <List.Item>Infringe intellectual property or privacy rights of others.</List.Item> | ||||||||||
| <List.Item>Disrupt or interfere with the security or operation of the platform.</List.Item> | ||||||||||
| <List.Item>Use automated systems to scrape or misuse the service.</List.Item> | ||||||||||
| </List> | ||||||||||
| <Paragraph> | ||||||||||
| We reserve the right to remove Content or restrict Accounts that violate these rules. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>7. Account Suspension and Termination</Title> | ||||||||||
| <List type='ordered'> | ||||||||||
| <List.Item>You may stop using Comify at any time by logging out of your Account.</List.Item> | ||||||||||
| <List.Item>At this stage, Account deletion is not available through self-service. You may request deletion by contacting us at comify@masking.tech.</List.Item> | ||||||||||
| <List.Item>We may suspend or terminate Accounts that violate these Terms or applicable laws.</List.Item> | ||||||||||
| </List> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>8. Availability and Maintenance</Title> | ||||||||||
| <Paragraph> | ||||||||||
| We aim to keep Comify available but do not guarantee uninterrupted access. We may | ||||||||||
| perform maintenance or updates that temporarily affect availability. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>9. Liability</Title> | ||||||||||
| <Paragraph> | ||||||||||
| To the maximum extent permitted by law: | ||||||||||
| </Paragraph> | ||||||||||
| <List type='unordered'> | ||||||||||
| <List.Item>Comify is provided “as is”.</List.Item> | ||||||||||
| <List.Item>We are not liable for damages resulting from User Content or interactions between Users.</List.Item> | ||||||||||
| <List.Item>We are not responsible for unauthorized access resulting from compromised login credentials.</List.Item> | ||||||||||
| </List> | ||||||||||
| <Paragraph> | ||||||||||
| Nothing in these Terms limits liability where such limitation is not permitted by law. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>10. Changes to These Terms</Title> | ||||||||||
| <Paragraph> | ||||||||||
| We may update these Terms from time to time. Continued use of Comify after changes take effect constitutes acceptance of the updated Terms. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| <Column gap='medium'> | ||||||||||
| <Title size='medium'>11. Governing Law</Title> | ||||||||||
| <Paragraph> | ||||||||||
| These Terms are governed by the laws of the Netherlands. | ||||||||||
| </Paragraph> | ||||||||||
| </Column> | ||||||||||
|
|
||||||||||
| </Column>; | ||||||||||
| } | ||||||||||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,17 @@ | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| import { Panel, ClickArea } from '@maskingtech/designsystem'; | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| import Logo from './Logo'; | ||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| type Props = { | ||||||||||||||||||||||||||||||||
| readonly onGoHome: () => void; | ||||||||||||||||||||||||||||||||
| }; | ||||||||||||||||||||||||||||||||
|
Comment on lines
6
to
8
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick | 🔵 Trivial Optional: rename The prop name ♻️ Suggested rename type Props = {
- readonly onGoBack: () => void;
+ readonly onNavigateHome: () => void;
};
-export default function Component({ onGoBack }: Props)
+export default function Component({ onNavigateHome }: Props)
{
return <Panel type='transparent' padding='small'>
- <ClickArea onClick={onGoBack}>
+ <ClickArea onClick={onNavigateHome}>
<Logo size='small' />
</ClickArea>
</Panel>;
}Also update the call site in - const Header = <LegalHeader onGoBack={navigateHome} />;
+ const Header = <LegalHeader onNavigateHome={navigateHome} />;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
| export default function Component({ onGoHome }: Props) | ||||||||||||||||||||||||||||||||
| { | ||||||||||||||||||||||||||||||||
| return <Panel type='transparent' padding='small'> | ||||||||||||||||||||||||||||||||
| <ClickArea onClick={onGoHome}> | ||||||||||||||||||||||||||||||||
| <Logo size='small' /> | ||||||||||||||||||||||||||||||||
| </ClickArea> | ||||||||||||||||||||||||||||||||
| </Panel>; | ||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||
|
Comment on lines
1
to
17
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Search for LegalInfo.tsx and verify the url='privacy' issue
echo "=== Finding LegalInfo.tsx ==="
fd 'LegalInfo.tsx' --type f
echo -e "\n=== Searching for the privacy link pattern ==="
rg -n "url='privacy'" --type-add 'tsx:*.tsx' --type=tsx -B2 -A2
echo -e "\n=== Searching more broadly for LegalInfo content ==="
rg -n "privacy" src/apps/social/app/application/components/ --type-add 'tsx:*.tsx' --type=tsx -C2Repository: MaskingTechnology/comify Length of output: 1440 🏁 Script executed: #!/bin/bash
# Search for privacy route definition
echo "=== Searching for /privacy route or privacy page ==="
rg -n "privacy" --type-add 'tsx:*.tsx' --type=tsx src/apps/social/app/application/ | grep -i "route\|path\|page" | head -20
echo -e "\n=== Searching in router/routing configuration files ==="
fd 'route|router' -t f src/apps/social/app/application/ | head -10
echo -e "\n=== Looking for any privacy-related files ==="
fd -i 'privacy' -t f src/apps/social/app/application/Repository: MaskingTechnology/comify Length of output: 460 Broken privacy policy link in The code at line 8 shows: <Link url='/terms' target='_blank'>terms of use</Link> and <Link url='privacy' target='_blank'>privacy policy</Link>
🐛 Proposed fix in
|
||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
|
|
||
| import { useNavigate } from 'react-router-dom'; | ||
|
|
||
| export default function useNavigateHome() | ||
| { | ||
| const navigate = useNavigate(); | ||
|
|
||
| return () => navigate('/'); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick | 🔵 Trivial
Optional: make the contact email address a clickable
mailto:link.The email is currently unformatted inline text inside
<Paragraph>, which requires users to copy-paste it manually.✨ Proposed improvement
<Column gap='medium'> <Title size='medium'>10. Contact</Title> <Paragraph> - For privacy-related questions or Account deletion requests, contact: - Email: comify@masking.tech + For privacy-related questions or Account deletion requests, contact: <Link url='mailto:comify@masking.tech'>comify@masking.tech</Link> </Paragraph> </Column>📝 Committable suggestion
🤖 Prompt for AI Agents