-
Notifications
You must be signed in to change notification settings - Fork 24
Launch Zplit's Modern Static Website: Minimalist Landing, Deep Linking, and Governance Compliance #13
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
base: main
Are you sure you want to change the base?
Conversation
…mpliance, and deep linking support Features: - Landing page with interactive hero section and phone mockups - Design showcase with 6 interactive app screens - Account creation with validation and localStorage persistence - Real-time expense splitting calculator (equal/custom/percentage) - Light/Dark theme toggle - Glassmorphism effects and Lottie animation support - GPL v3 license with full governance footer - KYA (Know Your Assumptions) modal and share functionality - Android App Links configuration (.well-known/assetlinks.json) - Stability Nexus logo integration throughout - Responsive design with Material Design principles
WalkthroughThis pull request adds foundational web presence files to the docs directory: an Android Asset Links configuration file, copyright and licensing documentation (GPL-3.0), a responsive landing page showcasing the Zplit project with hero section and features, and an interactive design showcase page featuring split calculator logic, account creation, theme toggle, and modal dialogs. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~35 minutes
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Actionable comments posted: 8
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
docs/.well-known/assetlinks.json(1 hunks)docs/COPYRIGHT.md(1 hunks)docs/LICENSE.md(1 hunks)docs/designs.html(1 hunks)docs/index.html(1 hunks)
🧰 Additional context used
🪛 LanguageTool
docs/LICENSE.md
[style] ~29-~29: Consider using only “Public” to avoid wordiness.
Context: ...re referring to freedom, not price. Our General Public Licenses are designed to make sure that...
(GENERAL_XX)
[style] ~93-~93: Consider a more concise word here.
Context: ...are not required to accept this License in order to receive or run a copy of the Program. A...
(IN_ORDER_TO_PREMIUM)
[style] ~93-~93: To make your writing clearer, consider a shorter, more direct phrase.
Context: ...tion of a covered work occurring solely as a consequence of using peer-to-peer transmission to rece...
(AS_A_CONSEQUENCE_OF)
🪛 markdownlint-cli2 (0.18.1)
docs/COPYRIGHT.md
45-45: Bare URL used
(MD034, no-bare-urls)
docs/LICENSE.md
134-134: Bare URL used
(MD034, no-bare-urls)
🔇 Additional comments (1)
docs/index.html (1)
23-24: The asset paths are correct as-is; the suggested fix would break them.The
assets/stability.svgfile is located at the repository root, not inside thedocs/directory. Fromdocs/index.html, the path../assets/stability.svgcorrectly points to the asset at the repo root. Changing to./assets/stability.svgwould cause 404 errors on GitHub Pages because it would look for the asset inside thedocs/directory where it doesn't exist.Likely an incorrect or invalid review comment.
| [ | ||
| { | ||
| "relation": ["delegate_permission/common.handle_all_urls"], | ||
| "target": { | ||
| "namespace": "android_app", | ||
| "package_name": "com.stabilitynexus.zplit", | ||
| "sha256_cert_fingerprints": [ | ||
| "14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5", | ||
| "AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99" | ||
| ] | ||
| } | ||
| } | ||
| ] No newline at end of file |
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.
🧩 Analysis chain
🏁 Script executed:
# Check if this file exists and examine its full context
git ls-files | grep -i assetlinksRepository: StabilityNexus/Zplit
Length of output: 96
🏁 Script executed:
# Check git history for this file
git log --oneline -- "docs/.well-known/assetlinks.json" | head -20Repository: StabilityNexus/Zplit
Length of output: 175
🏁 Script executed:
# Look for any documentation or context about this file
find . -type f -name "*.md" -o -name "*.txt" -o -name "*.doc*" | xargs grep -l "assetlinks\|SHA-256\|App Links" 2>/dev/null | head -10Repository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Check if there are other assetlinks files or similar patterns in the repo
find . -type f -name "*assetlinks*" -o -name "*app-links*"Repository: StabilityNexus/Zplit
Length of output: 98
🏁 Script executed:
# Show the git commit details
git show 8933b59 -- docs/.well-known/assetlinks.json | head -50Repository: StabilityNexus/Zplit
Length of output: 1654
🏁 Script executed:
# Check if there's any README or documentation about setting up this file
find . -type f \( -name "README*" -o -name "SETUP*" -o -name "CONTRIBUTING*" \) -exec grep -l "assetlinks\|fingerprint\|deep.*link\|App.*Link" {} \;Repository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Check the package name in the file to see if it matches the app
rg "com\.stabilitynexus\.zplit" --type jsonRepository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Look for Android app source code
find . -type f \( -name "*.gradle" -o -name "AndroidManifest.xml" -o -name "build.gradle*" \) | head -10Repository: StabilityNexus/Zplit
Length of output: 254
🏁 Script executed:
# Check for any documentation about the certificate fingerprints
rg "14:6D:E9:83" -A 2 -B 2Repository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Look for any references to certificate fingerprints or signing config
rg "fingerprint\|signing\|keystore" --type json --type gradle --type xml -i | head -20Repository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Examine the Android app build configuration to see signing details
cat -n android/app/build.gradle.kts | head -100Repository: StabilityNexus/Zplit
Length of output: 1753
🏁 Script executed:
# Look for any signing configuration
rg "signingConfigs\|sign\|keyStore" android/ -A 5Repository: StabilityNexus/Zplit
Length of output: 46
🏁 Script executed:
# Check if there are other Android modules or package name configurations
find android/ -name "build.gradle.kts" -o -name "build.gradle" | xargs grep -l "com.stabilitynexus\|applicationId" 2>/dev/nullRepository: StabilityNexus/Zplit
Length of output: 92
🏁 Script executed:
# Check the git history to see if the package name was changed
git log --all -p -- android/app/build.gradle.kts | grep -A 5 -B 5 "applicationId\|namespace" | head -40Repository: StabilityNexus/Zplit
Length of output: 1408
Replace placeholder fingerprints and verify package name matches Android app.
The second fingerprint (AA:BB:CC:DD:EE:FF:00:11:...) is a placeholder and will prevent Android App Links verification from succeeding. Additionally:
- The first fingerprint does not appear in the actual Android app signing configuration (which currently uses debug keys)
- The
package_namein assetlinks.json (com.stabilitynexus.zplit) does not match the Android app package name (com.example.zplitperandroid/app/build.gradle.kts)
Both fingerprints must be replaced with the actual SHA-256 hashes of the debug and/or release signing certificates, and the package name must match the app's applicationId.
🤖 Prompt for AI Agents
In docs/.well-known/assetlinks.json around lines 1 to 13, the assetlinks file
contains a placeholder fingerprint and a mismatched package name; replace the
placeholder fingerprint (AA:BB:...) and the incorrect first fingerprint with the
actual SHA-256 signing-certificate fingerprints for your debug and/or release
keys and change "package_name" to match the app's applicationId
(com.example.zplit). Obtain the correct SHA-256 values from your signing key
(e.g., via keytool or the Android Gradle signing report) and list them both in
the sha256_cert_fingerprints array, then verify the file is reachable at
https://<your-domain>/.well-known/assetlinks.json and that the package_name
exactly matches android/app/build.gradle.kts.
| **Copyright © 2025 The Stable Order. All rights reserved.** | ||
|
|
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.
Avoid “All rights reserved” alongside GPL notice (mixed legal signal).
GPL-3.0 grants broad rights; keeping “All rights reserved” in the same notice can be confusing/misleading.
-**Copyright © 2025 The Stable Order. All rights reserved.**
+**Copyright © 2025 The Stable Order.**Also applies to: 14-21
| **The Stable Order** | ||
| Email: contact@stability.nexus | ||
| Website: [https://stability.nexus/](https://stability.nexus/) | ||
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) |
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.
Add mailto: for the email to satisfy markdown linters / consistency.
-Email: contact@stability.nexus
+Email: [contact@stability.nexus](mailto:contact@stability.nexus) 📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **The Stable Order** | |
| Email: contact@stability.nexus | |
| Website: [https://stability.nexus/](https://stability.nexus/) | |
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) | |
| **The Stable Order** | |
| Email: [contact@stability.nexus](mailto:contact@stability.nexus) | |
| Website: [https://stability.nexus/](https://stability.nexus/) | |
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
45-45: Bare URL used
(MD034, no-bare-urls)
🤖 Prompt for AI Agents
In docs/COPYRIGHT.md around lines 44 to 47 the contact email is plain text;
update it to a mailto link to satisfy markdown linters and keep consistency —
replace "Email: contact@stability.nexus" with a Markdown link using mailto
(e.g., Email: [contact@stability.nexus](mailto:contact@stability.nexus)).
| <script> | ||
| let currentSplitMethod = 'equal'; | ||
|
|
||
| function setTheme(theme) { | ||
| const body = document.body; | ||
| const buttons = document.querySelectorAll('.theme-btn'); | ||
|
|
||
| buttons.forEach(btn => btn.classList.remove('active')); | ||
| event.target.classList.add('active'); | ||
|
|
||
| if (theme === 'dark') { | ||
| body.classList.add('dark-mode'); | ||
| } else { | ||
| body.classList.remove('dark-mode'); | ||
| } | ||
| } | ||
|
|
||
| function setSplitMethod(method) { | ||
| currentSplitMethod = method; | ||
| document.querySelectorAll('#expense-screen button[id^="split-"]').forEach(btn => { | ||
| btn.style.background = 'white'; | ||
| btn.style.color = 'var(--text-dark)'; | ||
| btn.style.border = '1px solid #ddd'; | ||
| }); | ||
| const activeBtn = document.getElementById('split-' + method); | ||
| activeBtn.style.background = 'var(--primary-green)'; | ||
| activeBtn.style.color = 'white'; | ||
| activeBtn.style.border = 'none'; | ||
| calculateSplit(); | ||
| } | ||
|
|
||
| function calculateSplit() { | ||
| const amount = parseFloat(document.getElementById('expense-amount').value) || 0; | ||
| const people = parseInt(document.getElementById('expense-people').value) || 2; | ||
| const resultDiv = document.getElementById('split-result'); | ||
|
|
||
| if (amount === 0) { | ||
| resultDiv.innerHTML = '💰 Enter an amount to split'; | ||
| return; | ||
| } | ||
|
|
||
| let perPerson = 0; | ||
| let message = ''; | ||
|
|
||
| switch(currentSplitMethod) { | ||
| case 'equal': | ||
| perPerson = amount / people; | ||
| message = `💰 Each person pays: <strong>$${perPerson.toFixed(2)}</strong>`; | ||
| break; | ||
| case 'custom': | ||
| message = `✏️ Custom split - Assign amounts manually for ${people} people`; | ||
| break; | ||
| case 'percent': | ||
| message = `📊 Percentage split - Divide $${amount.toFixed(2)} by percentages`; | ||
| break; | ||
| } | ||
|
|
||
| resultDiv.innerHTML = message; | ||
| } | ||
|
|
||
| // Account creation with validation | ||
| function createAccount() { | ||
| const username = document.getElementById('account-username').value.trim(); | ||
| const displayname = document.getElementById('account-displayname').value.trim(); | ||
| const usernameError = document.getElementById('username-error'); | ||
| const displaynameError = document.getElementById('displayname-error'); | ||
| const successMsg = document.getElementById('account-success'); | ||
|
|
||
| let isValid = true; | ||
|
|
||
| // Reset errors | ||
| usernameError.style.display = 'none'; | ||
| displaynameError.style.display = 'none'; | ||
| successMsg.style.display = 'none'; | ||
|
|
||
| // Validate username | ||
| if (!username) { | ||
| usernameError.textContent = 'Username is required'; | ||
| usernameError.style.display = 'block'; | ||
| isValid = false; | ||
| } else if (username.length < 3) { | ||
| usernameError.textContent = 'Username must be at least 3 characters'; | ||
| usernameError.style.display = 'block'; | ||
| isValid = false; | ||
| } else if (!/^[a-zA-Z0-9_]+$/.test(username)) { | ||
| usernameError.textContent = 'Username can only contain letters, numbers, and underscores'; | ||
| usernameError.style.display = 'block'; | ||
| isValid = false; | ||
| } | ||
|
|
||
| // Validate display name | ||
| if (!displayname) { | ||
| displaynameError.textContent = 'Display name is required'; | ||
| displaynameError.style.display = 'block'; | ||
| isValid = false; | ||
| } | ||
|
|
||
| if (isValid) { | ||
| // Store in localStorage (simulating local storage) | ||
| localStorage.setItem('zplit_username', username); | ||
| localStorage.setItem('zplit_displayname', displayname); | ||
|
|
||
| // Show success with animation | ||
| successMsg.style.display = 'block'; | ||
| successMsg.style.animation = 'slideInUp 0.5s ease-out'; | ||
|
|
||
| // Clear form | ||
| document.getElementById('account-username').value = ''; | ||
| document.getElementById('account-displayname').value = ''; | ||
|
|
||
| // Display saved account info | ||
| const accountInfo = document.getElementById('saved-account-info'); | ||
| if (accountInfo) { | ||
| accountInfo.innerHTML = ` | ||
| <div style="margin-top: 1rem; padding: 1rem; background: rgba(76, 175, 80, 0.1); border-radius: 8px; border-left: 4px solid var(--primary-green);"> | ||
| <p style="margin: 0; font-weight: 600;">Saved Account:</p> | ||
| <p style="margin: 0.5rem 0 0 0;">Username: @${username}</p> | ||
| <p style="margin: 0.5rem 0 0 0;">Display Name: ${displayname}</p> | ||
| </div> | ||
| `; | ||
| } | ||
|
|
||
| setTimeout(() => { | ||
| successMsg.style.animation = 'fadeOut 0.5s ease-out'; | ||
| setTimeout(() => { | ||
| successMsg.style.display = 'none'; | ||
| }, 500); | ||
| }, 3000); | ||
| } | ||
| } | ||
|
|
||
| @keyframes slideInUp { | ||
| from { | ||
| transform: translateY(20px); | ||
| opacity: 0; | ||
| } | ||
| to { | ||
| transform: translateY(0); | ||
| opacity: 1; | ||
| } | ||
| } | ||
|
|
||
| @keyframes fadeOut { | ||
| from { opacity: 1; } | ||
| to { opacity: 0; } | ||
| } | ||
|
|
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.
Critical: invalid CSS @keyframes inside <script> breaks all JS on the page.
Move those keyframes into the <style> block (or remove if not needed).
function createAccount() {
$$$
}
-
- @keyframes slideInUp {
- from {
- transform: translateY(20px);
- opacity: 0;
- }
- to {
- transform: translateY(0);
- opacity: 1;
- }
- }
-
- @keyframes fadeOut {
- from { opacity: 1; }
- to { opacity: 0; }
- }Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In docs/designs.html around lines 926 to 1072 there are CSS @keyframes rules
placed inside a <script> tag which breaks JS execution; move the @keyframes
slideInUp and fadeOut declarations out of the script block into an existing or
new <style> block (or into the page's CSS file) so the animations remain defined
but the script contains only JavaScript; ensure you remove the @keyframes from
the script and verify the animation class names still match the JS usage.
| function setTheme(theme) { | ||
| const body = document.body; | ||
| const buttons = document.querySelectorAll('.theme-btn'); | ||
|
|
||
| buttons.forEach(btn => btn.classList.remove('active')); | ||
| event.target.classList.add('active'); | ||
|
|
||
| if (theme === 'dark') { | ||
| body.classList.add('dark-mode'); | ||
| } else { | ||
| body.classList.remove('dark-mode'); | ||
| } | ||
| } |
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.
Fix setTheme() relying on implicit global event (breaks in many browsers).
-<button class="theme-btn active" onclick="setTheme('light')">Light</button>
-<button class="theme-btn" onclick="setTheme('dark')">Dark</button>
+<button class="theme-btn active" onclick="setTheme('light', event)">Light</button>
+<button class="theme-btn" onclick="setTheme('dark', event)">Dark</button>- function setTheme(theme) {
+ function setTheme(theme, event) {
const body = document.body;
const buttons = document.querySelectorAll('.theme-btn');
buttons.forEach(btn => btn.classList.remove('active'));
event.target.classList.add('active');Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In docs/designs.html around lines 929–941, setTheme() currently uses an implicit
global event (event.target) which is nonstandard and breaks in many browsers;
change the function to accept the event (e.g., function setTheme(theme, event))
and use event.currentTarget (or event.target if caller ensures target) to mark
the clicked button as active, update callers to pass the event (or call with
.bind/this if using inline handlers), and keep the rest of the logic (remove
'active' from all .theme-btn and add 'dark-mode' to body when theme === 'dark').
| <li><a href="https://github.com/StabilityNexus/Zplit" target="_blank">GitHub</a></li> | ||
| </ul> |
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.
Add rel="noopener noreferrer" to target="_blank" links.
-<a href="https://github.com/StabilityNexus/Zplit" target="_blank">GitHub</a>
+<a href="https://github.com/StabilityNexus/Zplit" target="_blank" rel="noopener noreferrer">GitHub</a>(Apply similarly to all external target="_blank" anchors on this page.)
Also applies to: 761-766, 772-787, 805-821
🤖 Prompt for AI Agents
In docs/index.html around lines 616-617 (and also apply the same change to the
other affected ranges 761-766, 772-787, 805-821), any anchor with
target="_blank" should include rel="noopener noreferrer"; update each external
<a> tag that opens in a new tab to add rel="noopener noreferrer" alongside
target="_blank" to prevent window.opener vulnerabilities and improve security,
making sure to add the attribute to every external anchor in those line ranges
without altering other attributes or link text.
| Copyright © 2025 The Stable Order. All rights reserved. | ||
|
|
||
| This program is free software: you can redistribute it and/or modify | ||
| it under the terms of the GNU General Public License as published by | ||
| the Free Software Foundation, either version 3 of the License, or | ||
| (at your option) any later version. | ||
|
|
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.
Drop “All rights reserved” in GPL header.
It’s commonly removed in GPL’d projects to avoid conflicting signals.
-Copyright © 2025 The Stable Order. All rights reserved.
+Copyright © 2025 The Stable Order.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Copyright © 2025 The Stable Order. All rights reserved. | |
| This program is free software: you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation, either version 3 of the License, or | |
| (at your option) any later version. | |
| Copyright © 2025 The Stable Order. | |
| This program is free software: you can redistribute it and/or modify | |
| it under the terms of the GNU General Public License as published by | |
| the Free Software Foundation, either version 3 of the License, or | |
| (at your option) any later version. | |
🤖 Prompt for AI Agents
In docs/LICENSE.md around lines 4 to 10, the GPL header currently includes the
phrase "All rights reserved" which should be removed; update the header by
deleting "All rights reserved." so the copyright line simply reads "Copyright ©
2025 The Stable Order." and leave the rest of the GPL text unchanged.
| **The Stable Order** | ||
| Website: [https://stability.nexus/](https://stability.nexus/) | ||
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) | ||
| Email: contact@stability.nexus | ||
|
|
||
| For questions about this license or Zplit, please visit our GitHub repository: | ||
| [https://github.com/StabilityNexus/Zplit](https://github.com/StabilityNexus/Zplit) |
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.
Make email a mailto: link (and keep link style consistent).
Email: contact@stability.nexus
+Email: [contact@stability.nexus](mailto:contact@stability.nexus)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| **The Stable Order** | |
| Website: [https://stability.nexus/](https://stability.nexus/) | |
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) | |
| Email: contact@stability.nexus | |
| For questions about this license or Zplit, please visit our GitHub repository: | |
| [https://github.com/StabilityNexus/Zplit](https://github.com/StabilityNexus/Zplit) | |
| **The Stable Order** | |
| Website: [https://stability.nexus/](https://stability.nexus/) | |
| GitHub: [https://github.com/StabilityNexus](https://github.com/StabilityNexus) | |
| Email: [contact@stability.nexus](mailto:contact@stability.nexus) | |
| For questions about this license or Zplit, please visit our GitHub repository: | |
| [https://github.com/StabilityNexus/Zplit](https://github.com/StabilityNexus/Zplit) |
🧰 Tools
🪛 markdownlint-cli2 (0.18.1)
134-134: Bare URL used
(MD034, no-bare-urls)
🤖 Prompt for AI Agents
In docs/LICENSE.md around lines 131 to 137, the plain email address should be
converted into a mailto link and match the existing Markdown link style; replace
the line "Email: contact@stability.nexus" with a Markdown link form such as
"Email: [contact@stability.nexus](mailto:contact@stability.nexus)" so it becomes
clickable and consistent with the Website/GitHub links.
Summary
Add a professional static marketing website for Zplit with modern design and full governance compliance.
Features
Files Added
docs/index.html- Main landing pagedocs/designs.html- Design showcase with interactive demosdocs/LICENSE.md- GPL v3 licensedocs/COPYRIGHT.md- Copyright and attributiondocs/.well-known/assetlinks.json- Android deep linkingdocs/.nojekyll- GitHub Pages configurationReady for GitHub Pages deployment!
Summary by CodeRabbit
Documentation
New Features
✏️ Tip: You can customize this high-level summary in your review settings.