Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions docs/billing-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,16 @@ The Capve portal allows billing address/name/email/tax-ID updates, payment metho

Checkout collects a billing address and business tax ID, saves the Customer's address/name, uses flexible subscription billing and preserves the existing remaining trial. The signed webhook retrieves current subscription state before updating access. A paid invoice, Checkout completion, or success redirect alone cannot unlock reporting. Invoice/Checkout reconciliation does not advance the subscription-event timestamp, so those independent event streams cannot suppress later subscription updates. Migration 0028 adds a separate reconciliation revision: every successful webhook update increments it, and handlers retry if another handler has changed the revision since they read the account. This also prevents invoice/Checkout snapshots from overwriting one another. Apply the migration before deploying the updated handler.

### Legal links and merchant identity

The live Capve portal links to `https://capve.app/privacy` and `https://capve.app/terms`. The website's shared footer also links to `/imprint`; all three pages reuse the company details in `src/pages/Legal.tsx`.

Stripe's account record identifies **CodepushGo, LLC**, a US LLC, at 131 Continental Dr, Suite 305, Newark, DE 19713, United States. The confirmed public support contact is `support@capgo.app`, telephone `+17759865200`. The website's Privacy Policy, Terms and imprint use these details; the earlier Digital Shift OÜ details were incorrect. No registration or tax identification number is published because Stripe did not return one.

The account business profile already names Capve and links to `https://capve.app/`. The current statement descriptor and card prefix are still `CAPGO`, and the account support URL is empty. The exposed MCP operations can read these account settings but do not provide an account-update operation; update the descriptor to `CAPVE` and support URL in the authenticated Dashboard before activation. Account-level Checkout policy URLs also require Dashboard review; the dedicated portal policy links are configured and verified separately.

Stripe currently reports charges/payouts enabled, but its requirements list contains outstanding Atlas formation fields. Do not treat those as completed verification: review them in Stripe's Dashboard. Do not invent officers, share counts, formation elections or terms acceptance values. Billing and automatic tax remain disabled; no account legal identity, tax origin, bank details or formation data were changed by this update.

### Tax activation

Stripe Tax Settings already have an active head-office configuration and account default tax code. No tax registrations were recorded when inspected. The existing account-wide settings were preserved. Both new Prices have unspecified tax behavior and the Products inherit the existing account tax category; confirm that classification and tax-inclusive/exclusive treatment before collecting tax. Creating these resources does not establish tax compliance.
Expand Down
7 changes: 7 additions & 0 deletions docs/screenshots/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,10 @@ Captured from the local app for PR #43 using an example account, with billing en
- `tracking-links-locked.png`: existing affiliate tracking URLs remain available while reporting columns are hidden.

The tracking and billing views use a local database trial expiry. URLs and account details shown belong to local example data.

## Imprint and legal company correction

Captured from the local app for the follow-up imprint PR. Company address and public contact details match the connected Stripe account's company and business profile. No private owner, bank, tax identifier or verification data is shown.

- `imprint-desktop.png`: full imprint at a 1440px viewport width.
- `imprint-mobile.png`: full imprint at a 390px viewport width; no horizontal overflow.
Binary file added docs/screenshots/imprint-desktop.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/screenshots/imprint-mobile.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions docs/stripe-integration-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,9 @@ The MCP connection cannot issue a restricted runtime API key or install Worker s
No active Tax registrations were recorded in Stripe. Existing merchant origin and tax defaults were preserved. Merchant confirmation of actual registrations, product category and price tax treatment is required before automatic tax activation. Sandbox coverage and an actual tax calculation are required before launch; mocked tests do not establish live tax collection.

Configure Smart Retries, Stripe payment emails and operational alerts in the Dashboard. Bento remains responsible for Capve trial and reporting-access notices. Operators handle refund/dispute/fraud decisions in Stripe. See the full activation and verification checklist in [billing setup](billing-setup.md).

## Legal information follow-up

Stripe's `company.name` confirms CodepushGo, LLC. Its US company address and public support email/phone are the source for the website's Privacy Policy, Terms and new imprint. The previous Digital Shift OÜ details were incorrect and have been removed from the legal pages. No company registration number or tax identifier was inferred or published. Estonia-specific establishment, retention and exclusive-court claims were removed; applicable-law and mandatory consumer rights wording remains.

The live Capve portal now links to the Privacy Policy at `https://capve.app/privacy` and Terms at `https://capve.app/terms`. Account-level review also found the `CAPGO` statement descriptor, an empty support URL and outstanding Atlas requirements. Those account settings are readable but no update operation is exposed through this MCP connection. See [billing setup](billing-setup.md) for the verified findings and activation requirements.
3 changes: 2 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
VerifyEmailPage,
} from "./pages/Auth";
import { LandingPage } from "./pages/Landing";
import { PrivacyPage, TermsPage } from "./pages/Legal";
import { ImprintPage, PrivacyPage, TermsPage } from "./pages/Legal";
import { NotFoundPage } from "./pages/NotFound";

export function App() {
Expand All @@ -20,6 +20,7 @@ export function App() {
<BrowserRouter>
<Routes>
<Route path="/" element={<LandingPage />} />
<Route path="/imprint" element={<ImprintPage />} />
<Route path="/privacy" element={<PrivacyPage />} />
<Route path="/terms" element={<TermsPage />} />
<Route path="/login" element={<LoginPage />} />
Expand Down
5 changes: 4 additions & 1 deletion src/components/SiteFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ export function SiteFooter() {
</a>
.
</p>
<nav aria-label="Legal" className="flex gap-4">
<nav aria-label="Legal" className="flex flex-wrap gap-4">
<Link className="underline" to="/imprint">
Imprint
</Link>
<Link className="underline" to="/privacy">
Privacy
</Link>
Expand Down
72 changes: 50 additions & 22 deletions src/pages/Legal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import { PLANS } from "../../shared/billing";
import { Shell } from "../components/ui";

const UPDATED = "October 25, 2026";
const SUPPORT_EMAIL = "support@capve.app";
const SUPPORT_EMAIL = "support@capgo.app";

const COMPANY = {
name: "Digital Shift OÜ",
registry: "14236508",
address: "Sepapaja 6, 15551 Tallinn, Estonia",
name: "CodepushGo, LLC",
address: "131 Continental Dr, Suite 305, Newark, DE 19713, United States",
phone: "+17759865200",
};

function LegalLayout({ title, children }: { title: string; children: ReactNode }) {
Expand Down Expand Up @@ -49,13 +49,47 @@ function Mail() {
);
}

export function ImprintPage() {
return (
<LegalLayout title="Imprint">
<h2>Website operator</h2>
<p>
<strong>{COMPANY.name}</strong>
<br />
US limited liability company
<br />
Business address: {COMPANY.address}
</p>

<h2>Contact</h2>
<p>
For questions about Capve, your account, billing, or this website, email <Mail />.
Telephone: <a href={`tel:${COMPANY.phone}`}>{COMPANY.phone}</a>.
</p>

<h2>Hosted service</h2>
<p>
This imprint applies to the hosted Capve service at capve.app. Capve provides campaign and
affiliate tracking and analytics. If you run your own copy of the open-source software, you
are responsible for that installation and its legal notices.
</p>

<h2>Privacy and terms</h2>
<p>
Our <Link to="/privacy">Privacy Policy</Link> explains how we handle personal data. Our{" "}
<Link to="/terms">Terms of Service</Link> describe the hosted service, subscriptions, and
your responsibilities.
</p>
</LegalLayout>
);
}

export function PrivacyPage() {
return (
<LegalLayout title="Privacy Policy">
<p>
This policy explains how {COMPANY.name} ("Capve", "we") handles personal data when you use
the hosted Capve service at capve.app. {COMPANY.name} is an Estonian private limited company,
registry code {COMPANY.registry}, {COMPANY.address}.
the hosted Capve service at capve.app. {COMPANY.name} is a US limited liability company at {COMPANY.address}.
</p>
<p>
Capve is a campaign and affiliate analytics service. It records clicks and conversions,
Expand Down Expand Up @@ -191,7 +225,7 @@ export function PrivacyPage() {
finish deletion, resolve a dispute, or meet a legal hold.
</li>
<li>
Billing records are kept for as long as Estonian accounting law requires.
Billing records are kept for as long as applicable tax and accounting laws require.
</li>
<li>
Click and conversion records are kept for the life of the account. If we set a shorter
Expand Down Expand Up @@ -234,7 +268,7 @@ export function PrivacyPage() {

<h2>8. International transfers</h2>
<p>
We are established in Estonia. Cloudflare processes requests on a global edge network, so
We are a US company. Cloudflare processes requests on a global edge network, so
personal data may be processed outside the European Economic Area. Where the law requires a
transfer tool, we use one the European Commission has approved, such as its standard
contractual clauses, or we rely on an adequacy decision that covers the recipient.
Expand All @@ -244,12 +278,8 @@ export function PrivacyPage() {
<p>
If you are in the EEA, the United Kingdom, or Switzerland, you can ask us to access, correct,
delete, or restrict your account data, to object to processing based on legitimate interest,
and to receive a portable copy. You can also complain to the Estonian Data Protection
Inspectorate (Andmekaitse Inspektsioon),{" "}
<a href="https://www.aki.ee/" target="_blank" rel="noreferrer">
aki.ee
</a>
, or to your local authority.
and to receive a portable copy. You can also complain to the competent data protection
authority where you live or work, or where an alleged infringement occurred.
</p>
<p>
For tracking data, the controller is the Capve customer who ran the campaign. Direct requests
Expand Down Expand Up @@ -291,7 +321,7 @@ export function PrivacyPage() {

<h2>13. Contact</h2>
<p>
{COMPANY.name}, {COMPANY.address}. Registry code {COMPANY.registry}. Email <Mail />.
{COMPANY.name}, {COMPANY.address}. Email <Mail />.
</p>
</LegalLayout>
);
Expand All @@ -302,8 +332,7 @@ export function TermsPage() {
<LegalLayout title="Terms of Service">
<p>
These terms are a contract between you and {COMPANY.name} ("Capve", "we") for the hosted
Capve service at capve.app. {COMPANY.name} is an Estonian private limited company, registry
code {COMPANY.registry}, {COMPANY.address}.
Capve service at capve.app. {COMPANY.name} is a US limited liability company at {COMPANY.address}.
</p>
<p>
By creating an account, or by using the service after these terms are shown to you, you agree
Expand Down Expand Up @@ -542,15 +571,14 @@ export function TermsPage() {

<h2>13. Law and disputes</h2>
<p>
These terms are governed by the laws of Estonia, excluding conflict-of-law rules. The courts
of Harju County, Estonia, have exclusive jurisdiction, except that we may also sue in the
courts of your domicile to collect an unpaid fee. If you are a consumer in the European Union,
you keep the mandatory rights and the choice of court that consumer law gives you.
Applicable law determines the law and courts that apply to a dispute. Nothing in these terms
takes away mandatory consumer protections or any right to bring a claim in a court that
applicable law gives you.
</p>

<h2>14. Contact</h2>
<p>
{COMPANY.name}, {COMPANY.address}. Registry code {COMPANY.registry}. Email <Mail />.
{COMPANY.name}, {COMPANY.address}. Email <Mail />.
</p>
</LegalLayout>
);
Expand Down
Loading