Skip to content

Conversation

@sachingwala
Copy link

@sachingwala sachingwala commented Dec 13, 2025

What this PR does

  • Adds a static website for Zplit
  • Implements a minimal green-themed design
  • Includes sections for Features, How It Works, and Security & Trust
  • Uses placeholder app screenshots
  • Keeps all changes isolated from the Flutter app

Why this is needed

Zplit requires a static site to:

  • Advertise the application
  • Maintain branding consistency
  • Support deeplinking asset hosting in the future

Testing

  • Website tested locally as a static site
  • Verified navigation and responsiveness
  • No impact on existing mobile code

Closes #3

Summary by CodeRabbit

  • New Features
    • Launched Zplit website with a responsive landing page featuring hero section with call-to-action, feature highlights, step-by-step guide, security details, and app download options.
    • Added Android App Link support for secure app verification and linking.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 13, 2025

Walkthrough

Introduces a static website for Zplit featuring a multi-section landing page with Tailwind CSS styling and a green color palette. Adds Android Deep Link asset links configuration to enable app link routing.

Changes

Cohort / File(s) Summary
Android Deep Linking Configuration
zplit-website/.well-known/assetlinks.json
Declares Android App Link relation for com.zplit.app with SHA-256 certificate fingerprint for deep linking support
Website Landing Page
zplit-website/index.html
Complete static HTML landing page with Tailwind CSS (CDN + custom config), fixed navbar, hero section with CTA, features grid, "How It Works" process section, security facts, download CTA, and dark-green themed footer; uses responsive design and placeholder assets

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

  • Verify assetlinks.json follows Android App Links specification and certificate fingerprint is correctly formatted
  • Check index.html HTML structure semantics and Tailwind class correctness across responsive breakpoints
  • Confirm color palette aligns with minimalistic green design from linked issue requirements
  • Ensure placeholder image paths are valid and will render correctly

Poem

🐰✨ A site takes form with greens so true,
Assetlinks binding deep the link right through,
Responsive, bold, from hero to the last,
Zplit's digital home, built quick and fast!
hops with joy 🌿

Pre-merge checks and finishing touches

✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add minimal static website for Zplit' accurately and concisely summarizes the main change: creating a static website for the Zplit application.
Linked Issues check ✅ Passed The pull request successfully implements all coding requirements from issue #3: creates a static website to advertise Zplit, follows minimalistic design principles with green hues, includes placeholder screenshots, and adds assetlinks.json for deeplinking support.
Out of Scope Changes check ✅ Passed All changes are directly related to issue #3 objectives: the index.html file creates the advertised website, and assetlinks.json enables deeplinking asset hosting. No unrelated or extraneous changes are present.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (4)
zplit-website/index.html (4)

30-40: Add mobile menu implementation.

The navbar hides navigation links on mobile (hidden md:flex) but provides no mobile menu alternative (e.g., hamburger icon, offcanvas menu, or collapsible nav). Users on mobile devices will see no navigation links at all.

Implement a mobile menu toggle, either:

  • A hamburger icon that toggles a collapsible menu, or
  • A bottom navigation bar (if appropriate for the design)

This ensures navigation is accessible on all screen sizes and improves the mobile user experience.

Please clarify the mobile navigation requirement and confirm the intended UX for mobile users.


1-26: Consider moving Tailwind to a build process for production.

Using Tailwind CSS via CDN (line 9) is convenient for prototyping but introduces performance and maintainability concerns in production:

  • Larger bundle size (full Tailwind framework + custom config inline)
  • No tree-shaking or unused CSS removal
  • Configuration mixed in HTML rather than a dedicated config file

For better performance and maintainability, migrate to a build-time Tailwind setup (e.g., tailwindcss CLI or via a bundler like webpack/Vite). This will:

  • Reduce CSS payload significantly
  • Allow proper configuration management
  • Enable caching and optimization

Would you like me to provide a configuration example for migrating to a build-process Tailwind setup?


157-162: Replace placeholder footer links with proper URLs or hide them.

Footer links (Privacy, Terms, Contact at lines 159–161) use href="#", which will navigate to the top of the page when clicked. If these pages don't exist yet, either:

  • Replace # with actual URLs (e.g., /privacy.html), or
  • Temporarily disable the links to avoid confusion:
-        <a href="#" class="hover:underline">Privacy</a>
-        <a href="#" class="hover:underline">Terms</a>
-        <a href="#" class="hover:underline">Contact</a>
+        <a class="text-gray-400 cursor-not-allowed">Privacy</a>
+        <a class="text-gray-400 cursor-not-allowed">Terms</a>
+        <a class="text-gray-400 cursor-not-allowed">Contact</a>

Alternatively, create placeholder pages and link them properly.


53-58: Ensure CTA links have proper destinations.

The "Get the App" and "Learn More" buttons use fragment identifiers (#download, #features) which work for in-page navigation. If "Get the App" is intended to link to an app store, update the href to the correct Play Store or App Store URL:

-          <a href="#download" class="bg-primary text-white px-6 py-3 rounded-lg text-sm font-medium hover:opacity-90">
+          <a href="https://play.google.com/store/apps/details?id=com.zplit.app" target="_blank" rel="noopener noreferrer" class="bg-primary text-white px-6 py-3 rounded-lg text-sm font-medium hover:opacity-90">
             Get the App
           </a>

This ensures users can directly access the app store rather than scrolling to the download section.

Please confirm the intended destination for the "Get the App" CTA and verify the Play Store URL is correct.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a490608 and 87083ec.

⛔ Files ignored due to path filters (2)
  • assets/img-2.png is excluded by !**/*.png
  • assets/img-3.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • zplit-website/.well-known/assetlinks.json (1 hunks)
  • zplit-website/index.html (1 hunks)
🔇 Additional comments (1)
zplit-website/index.html (1)

62-67: Verify asset path resolution.

Images are referenced with relative paths like ../assets/img-3.png. Verify that:

  1. The assets directory exists at the correct path relative to the deployed index.html file.
  2. The file structure matches the expected deployment layout.
  3. All asset files are included in the repository and deployment.

If the website is served from a subdirectory or via a CDN, relative paths may break. Consider using absolute paths or a build-time asset bundling solution.

Please confirm the intended file structure and that all assets are present in the repository.

Comment on lines +9 to +11
"sha256_cert_fingerprints": [
"..."
]
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# First, let's check if the file exists and read its full content
cat -n zplit-website/.well-known/assetlinks.json

Repository: StabilityNexus/Zplit

Length of output: 460


🏁 Script executed:

# Check the overall structure and context of the project
ls -la zplit-website/.well-known/

Repository: StabilityNexus/Zplit

Length of output: 236


🏁 Script executed:

# Search for any related documentation or comments about the certificate fingerprint
rg -i "fingerprint|keytool|assetlinks" zplit-website/ --type json --type md --type txt

Repository: StabilityNexus/Zplit

Length of output: 46


Replace placeholder SHA-256 certificate fingerprint before merging.

The assetlinks.json file contains a placeholder "..." for the SHA-256 cert fingerprint. This must be replaced with the actual certificate fingerprint from your app's keystore before Android can verify the asset links.

To obtain the correct fingerprint:

keytool -list -v -keystore your-keystore.jks -alias your-key-alias

Update the file with the actual 40-character SHA-256 hash (without colons).

🤖 Prompt for AI Agents
In zplit-website/.well-known/assetlinks.json around lines 9 to 11, the
sha256_cert_fingerprints array contains a placeholder "..." that must be
replaced with your app signing certificate's actual 40-character SHA-256
fingerprint (no colons) before merging; run keytool -list -v -keystore
your-keystore.jks -alias your-key-alias to get the SHA-256 value, copy the
fingerprint (strip any colons), replace the "..." entry with that exact hash
string, and ensure the JSON remains valid (quotes and commas intact).


<!-- App Mockup Placeholder -->
<div class="flex justify-center">
<div class="w-74 h-[450px] bg-white rounded-3xl shadow-xl flex items-center justify-center text-gray-400">
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix invalid Tailwind width class.

Line 64 uses w-74, which is not a valid Tailwind class. Tailwind's default width scale uses multiples of 0.25rem (4px): w-64, w-72, w-80, etc.

Replace w-74 with a valid class like w-72 or w-64:

-        <div class="w-74 h-[450px] bg-white rounded-3xl shadow-xl flex items-center justify-center text-gray-400">
+        <div class="w-72 h-[450px] bg-white rounded-3xl shadow-xl flex items-center justify-center text-gray-400">
📝 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.

Suggested change
<div class="w-74 h-[450px] bg-white rounded-3xl shadow-xl flex items-center justify-center text-gray-400">
<div class="w-72 h-[450px] bg-white rounded-3xl shadow-xl flex items-center justify-center text-gray-400">
🤖 Prompt for AI Agents
In zplit-website/index.html around line 64, the element uses an invalid Tailwind
class `w-74`; replace it with a valid width class such as `w-72` or `w-64`
(choose the width that matches the intended layout) so the Tailwind utility is
recognized and the component renders correctly.

<div class="p-6 bg-softgray rounded-xl">
<h3 class="font-medium text-darkgreen">Instant Splits</h3>
<p class="mt-2 text-sm text-gray-600">Split expenses in seconds with no math hassle.</p>
<img src="../assets/HOW-1.webp" alt="" class=" ">
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Add descriptive alt text to images for accessibility and SEO.

Images at lines 80, 85, 90, and 95 have empty alt attributes, which breaks accessibility for screen reader users and misses SEO opportunities. Each image should have a brief, descriptive alt text that conveys the content or purpose.

Apply this diff to add meaningful alt text:

-          <img src="../assets/HOW-1.webp" alt="" class=" ">
+          <img src="../assets/HOW-1.webp" alt="Instant split calculation illustration" class="">
-          <img src="../assets/htw-4.webp" alt="">
+          <img src="../assets/htw-4.webp" alt="Transparent expense tracking illustration">
-          <img src="../assets/htw-3.webp" alt="">
+          <img src="../assets/htw-3.webp" alt="Group expense splitting illustration">
-          <img src="../assets/htw-1.webp" alt="">
+          <img src="../assets/htw-1.webp" alt="Security and privacy protection illustration">

Also applies to: 85-85, 90-90, 95-95

🤖 Prompt for AI Agents
In zplit-website/index.html around lines 80, 85, 90 and 95, several <img> tags
have empty alt attributes; update each img to include concise, descriptive alt
text that accurately describes the image content or purpose (e.g., "Diagram of
HOW process", "HOW step 2 illustration", "HOW step 3 illustration", "HOW step 4
illustration" or specific descriptions based on the actual images). Ensure the
alt text is short (a few words) and meaningful for screen readers and SEO, and
avoid redundant phrases like "image of" or decorative text if the image is
purely decorative use alt="" explicitly only if it conveys no information.

Comment on lines +142 to +149
<button class="bg-primary text-white px-8 py-3 rounded-lg text-sm font-medium">
<a href="#" class="block">
Download for Android
</a>
</button>
<button class="border border-primary text-primary px-8 py-3 rounded-lg text-sm font-medium">
iOS Coming Soon
</button>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Fix incorrect semantic HTML nesting and non-functional button.

Two issues:

  1. Lines 142–146: A <button> element should not wrap an <a> tag. This creates invalid nested interactive elements and confuses assistive technologies. Either use a <button> with click handler or use an <a> styled as a button.
  2. Line 148: The "iOS Coming Soon" button has no href or onclick, so it appears interactive but has no action. This may confuse users.

Apply this diff to fix semantic HTML and clarify button intent:

-        <button class="bg-primary text-white px-8 py-3 rounded-lg text-sm font-medium">
-        <a href="#" class="block">
+        <a href="#" class="bg-primary text-white px-8 py-3 rounded-lg text-sm font-medium inline-block">
           Download for Android
-          </a>
-        </button>
-        <button class="border border-primary text-primary px-8 py-3 rounded-lg text-sm font-medium">
+        </a>
+        <span class="border border-primary text-primary px-8 py-3 rounded-lg text-sm font-medium inline-block cursor-not-allowed opacity-60">
           iOS Coming Soon
-        </button>
+        </span>

Alternatively, if you prefer <button> elements, add onclick handlers or use an <a> styled as a button.

📝 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.

Suggested change
<button class="bg-primary text-white px-8 py-3 rounded-lg text-sm font-medium">
<a href="#" class="block">
Download for Android
</a>
</button>
<button class="border border-primary text-primary px-8 py-3 rounded-lg text-sm font-medium">
iOS Coming Soon
</button>
<a href="#" class="bg-primary text-white px-8 py-3 rounded-lg text-sm font-medium inline-block">
Download for Android
</a>
<span class="border border-primary text-primary px-8 py-3 rounded-lg text-sm font-medium inline-block cursor-not-allowed opacity-60">
iOS Coming Soon
</span>
🤖 Prompt for AI Agents
In zplit-website/index.html around lines 142 to 149, the markup nests an <a>
inside a <button> and leaves the "iOS Coming Soon" control non-functional;
replace the button that wraps the anchor with an <a> element styled like the
primary button and give it the download URL (or proper href) so it functions as
a link, and for the "iOS Coming Soon" control either convert it to a
non-interactive element (e.g., a <span> or <button disabled>) with clear
aria-label/text indicating it’s unavailable or add a no-op onclick that opens a
tooltip/modal—ensuring interactive elements are not nested and all apparent
controls have appropriate behavior and accessibility attributes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design Website for Zplit

1 participant