-
Notifications
You must be signed in to change notification settings - Fork 0
[pm-manager/pm-coder][refund-policy-page] the refund policy page + reconcile the ToS contradiction (Odoo #7729 S1) — HOLD for Hassan's click #147
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
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,111 @@ | ||
| 'use client' | ||
|
|
||
| import { useEffect } from 'react' | ||
| import EditorialShell, { PageHero } from '@/components/editorial/shell' | ||
|
|
||
| // Odoo #7729 — the written refund policy. Reconciles the two refund | ||
| // statements that were live at once before this page existed: the Terms of | ||
| // Service's general "fees are non-refundable" clause, and the /offer page's | ||
| // conditional 30-day performance guarantee. This page states both, plainly, | ||
| // and does not invent a broader promise than either already makes. | ||
| const sections = [ | ||
| { id: 'general', title: 'Paid Plans' }, | ||
| { id: 'guarantee', title: 'Pilot Guarantee' }, | ||
| { id: 'how-to-ask', title: 'How to Ask' }, | ||
| ] | ||
|
|
||
| const h2Anchor = { scrollMarginTop: '90px' } as const | ||
|
|
||
| export default function RefundPolicyPage() { | ||
| useEffect(() => { | ||
| document.title = 'Refund Policy - Knowcap.ai' | ||
| }, []) | ||
|
|
||
| return ( | ||
| <EditorialShell> | ||
| <PageHero | ||
| kicker="Legal Information" | ||
| title="Refund Policy" | ||
| sub={<>What happens if you want your money back • Last updated: August 6, 2026</>} | ||
| /> | ||
| <div className="cl-page-body"> | ||
| <div className="cl-wrap"> | ||
| <nav | ||
| aria-label="Refund policy sections" | ||
| style={{ display: 'flex', flexWrap: 'wrap', gap: 10, justifyContent: 'center', marginBottom: 28 }} | ||
| > | ||
| {sections.map((section) => ( | ||
| <a key={section.id} href={`#${section.id}`} className="cl-btn cl-btn--ghost cl-btn--sm"> | ||
| {section.title} | ||
| </a> | ||
| ))} | ||
| </nav> | ||
|
|
||
| <div className="cl-prose"> | ||
| <p> | ||
| This page states what actually happens if you ask for a refund today. It does not promise | ||
| anything beyond what is written here or in our{' '} | ||
| <a href="/terms">Terms of Service</a>. | ||
| </p> | ||
|
|
||
| <h2 id="general" style={h2Anchor}>Standard paid plans</h2> | ||
| <p> | ||
| Regular monthly and annual subscriptions are <strong>non-refundable</strong>, except where | ||
| required by law or where a specific guarantee applies (see below). You can cancel at any | ||
| time — cancellation stops future billing, and you keep access to paid features until the | ||
| end of the billing period you already paid for. Cancelling does not refund the current | ||
| period. | ||
| </p> | ||
|
|
||
| <h2 id="guarantee" style={h2Anchor}>The pilot performance guarantee</h2> | ||
| <p> | ||
| Customers who purchase Knowcap through the <strong>Odoo Partner Edition pilot offer</strong>{' '} | ||
| (the pricing shown on our <a href="/offer">pilot offer page</a>) are covered by a specific, | ||
| conditional guarantee. It reads exactly as it does on that page: | ||
| </p> | ||
| <p> | ||
| <em>If within the first 30 days, Knowcap does not:</em> | ||
| </p> | ||
| <ul> | ||
| <li>Generate one complex SOP from a captured walkthrough, instantly</li> | ||
| <li>Resolve a scope-creep dispute using the confirmed record of what was said</li> | ||
| <li>Demonstrate a path to saving 50 hours per 500-hour project</li> | ||
| </ul> | ||
| <p> | ||
| <em>We will refund 100% of your subscription.</em> | ||
| </p> | ||
| <p> | ||
| This guarantee applies to the pilot offer only. If you did not sign up through that offer, | ||
| the standard-plan terms above apply instead. | ||
| </p> | ||
|
|
||
| <h2 id="how-to-ask" style={h2Anchor}>How to ask for a refund</h2> | ||
| <p> | ||
| <strong>If you have an account:</strong> sign in, open the account menu in the sidebar, and | ||
| choose <strong>Contact support</strong> → <strong>Refund Request</strong>. Your request | ||
| reaches our team directly from inside the product. | ||
| </p> | ||
| <p> | ||
| <strong>If you have not signed up yet, or can't sign in:</strong> email{' '} | ||
| <a href="mailto:hsa@smetools.io">hsa@smetools.io</a> and we will get back to you. | ||
| </p> | ||
| <p> | ||
| Approved refunds are processed back to your original payment method. Once a refund is | ||
| issued, any credits or usage granted for that billing period are reversed at the same time | ||
| — this happens automatically and does not require a separate step from you. | ||
| </p> | ||
| </div> | ||
|
|
||
| <div style={{ textAlign: 'center', marginTop: 56 }}> | ||
| <button | ||
| onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })} | ||
| className="cl-btn cl-btn--ghost cl-btn--sm" | ||
| > | ||
| Back to Top | ||
| </button> | ||
| </div> | ||
| </div> | ||
| </div> | ||
| </EditorialShell> | ||
| ) | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Update the Terms “Last updated” date.
Line 111 changes the billing refund exception. The page still shows “Last updated: June 14, 2026” at Line 25. Section 13 states that Terms updates change this date. Set it to August 6, 2026, or to the actual publication date.
🤖 Prompt for AI Agents