Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
124d978
docs: replace default Next.js README with custom Stackwise company pr…
daniel-teddy Aug 7, 2026
da72d3d
feat: implement FAQ section, landing page components, and site naviga…
daniel-teddy Aug 20, 2026
003de42
chore: bump version from 0.1.0 to 0.2.0 in package.json
daniel-teddy Aug 20, 2026
fc31725
feat: add bilingual EN/FR site copy for SuperCmd-style sections
daniel-teddy Aug 20, 2026
731e6e9
feat: add high-fidelity landing UI primitives
daniel-teddy Aug 20, 2026
6a871ed
feat: rebuild landing page with full SuperCmd-like section set
daniel-teddy Aug 20, 2026
e2bcefb
feat: add /en and /fr locale routing with language switcher
daniel-teddy Aug 20, 2026
caf8346
feat: enhance deployment process and configuration for Cloudflare Wor…
daniel-teddy Aug 20, 2026
738d119
feat: enhance landing page with locale support and new visual components
daniel-teddy Aug 20, 2026
141abfc
feat: enhance hero and landing components with new features and styling
daniel-teddy Aug 20, 2026
967ed2f
refactor: simplify SiteNav component and update brand name in content
daniel-teddy Aug 20, 2026
f0457de
fix: update deployment message format and improve argument handling i…
daniel-teddy Aug 20, 2026
27ecb19
refactor: update language labels in LanguageSwitcher and comment out …
daniel-teddy Aug 22, 2026
7fb636e
refactor: update booking labels in English and French site copy
daniel-teddy Aug 22, 2026
6031602
refactor: update branding and improve copy in English and French content
daniel-teddy Aug 22, 2026
2b749c9
refactor: remove unused image assets and update layout metadata for SEO
daniel-teddy Aug 22, 2026
6f38e37
feat: add Open Graph images for improved social media sharing
daniel-teddy Aug 22, 2026
82bb842
refactor: update image paths for Open Graph metadata
daniel-teddy Aug 22, 2026
0e6b0f5
refactor: correct site name casing in metadata
daniel-teddy Aug 22, 2026
8ced8b2
refactor: update Open Graph image URLs to use absolute paths
daniel-teddy Aug 22, 2026
fd971ba
refactor: simplify button className logic in ProviderTabs component
daniel-teddy Sep 10, 2026
2977477
refactor: clean up commented code and improve structure in ProviderTa…
daniel-teddy Sep 10, 2026
1e558cf
Implement code changes to enhance functionality and improve performance
daniel-teddy Sep 10, 2026
d988a39
feat: add new tools to ProviderTabs component
daniel-teddy Sep 10, 2026
2fd27fa
feat: implement admin dashboard and payment link management features
daniel-teddy Sep 22, 2026
92c5390
feat: implement secret management for KPay integration
daniel-teddy Sep 22, 2026
409cead
feat: implement withdrawal functionality for KPay integration
daniel-teddy Sep 22, 2026
1af7a0a
feat: enhance migration script and update payment link builder
daniel-teddy Sep 22, 2026
852c538
feat: add schema management and enhance database readiness checks
daniel-teddy Sep 22, 2026
cba642d
refactor: remove customer name and email from payment initiation meta…
daniel-teddy Sep 22, 2026
e5df3e4
feat: enhance invoice components with compact mode and styling improv…
daniel-teddy Sep 22, 2026
b1cfd2b
refactor: simplify InvoiceHeader and update payment button text
daniel-teddy Sep 22, 2026
09f6076
feat: enhance payment methods and update service catalog pricing
daniel-teddy Sep 22, 2026
9617ee1
feat: enhance payment link management and environment handling
daniel-teddy Sep 22, 2026
784dd8c
feat: add db:reset:prod-payments script and enhance payment link mana…
daniel-teddy Sep 22, 2026
83fe2a0
feat: enhance admin dashboard and payment link management
daniel-teddy Sep 22, 2026
cb1d658
feat: enhance admin dashboard with payment link filtering and totals …
daniel-teddy Sep 22, 2026
b5bc649
refactor: streamline database schema management and email template ha…
daniel-teddy Sep 22, 2026
f1a2ddf
feat: enhance admin layout with metadata and favicon support
daniel-teddy Sep 22, 2026
54b6c0c
feat: update component styles and layout for improved UI consistency
daniel-teddy Sep 22, 2026
fdb5f0c
fix: adjust spacing and padding in InvoiceView for improved layout co…
daniel-teddy Sep 22, 2026
d667c85
fix: update contact prompt in InvoiceView for improved clarity
daniel-teddy Sep 22, 2026
65bbc5a
fix: update date formatting in InvoiceView for improved clarity
daniel-teddy Sep 22, 2026
3ba10ae
docs: update README with payment flow and legal compliance information
daniel-teddy Sep 22, 2026
d34c153
feat: implement payment legal notice and receipt access control
daniel-teddy Sep 22, 2026
f05c70a
feat: update invoice number handling and database schema
daniel-teddy Sep 22, 2026
a07be94
refactor: remove invoice number UUID migration and update generation …
daniel-teddy Sep 22, 2026
6b0db9a
feat: add pay portal styles and update layout for light theme
daniel-teddy Sep 22, 2026
14dab04
feat: implement payment checkout and receipt handling components
daniel-teddy Sep 22, 2026
9d2188d
feat: implement payment audit logging and admin display
daniel-teddy Sep 22, 2026
3f5356b
feat: enhance payment audit logging and admin interface
daniel-teddy Sep 22, 2026
a9a9194
refactor: update payment audit log components and enhance filtering
daniel-teddy Sep 22, 2026
6d62028
feat: add allowed payment methods to payment links
daniel-teddy Sep 22, 2026
cf8bbee
feat: integrate payment methods into payment link details
daniel-teddy Sep 22, 2026
10c717e
feat: enhance payment initiation and error handling
daniel-teddy Sep 23, 2026
a1071ef
refactor: enhance date formatting and update components
daniel-teddy Sep 23, 2026
3f2285f
feat: add manual payment recording and receipt management
daniel-teddy Sep 23, 2026
d6ff44e
feat: implement pagination for payment audit logs and links
daniel-teddy Sep 23, 2026
a72c684
refactor: reorganize payment-related imports and move functions to ne…
daniel-teddy Sep 23, 2026
fbc3804
feat: integrate Paystack payment processing and enhance payment link …
daniel-teddy Oct 14, 2026
649279f
fix: update Paystack payment processing to support local currency
daniel-teddy Oct 14, 2026
91b3f82
feat: enhance admin payment processing and UI components
daniel-teddy Oct 14, 2026
814bd5a
feat: implement maintenance subscription management and Paystack inte…
daniel-teddy Oct 14, 2026
6615349
feat: update README and add new images for Stackwise branding
daniel-teddy Oct 14, 2026
7d9711c
feat: add portfolio section and related images
daniel-teddy Oct 14, 2026
46b5a78
feat: enhance admin UI components and navigation
daniel-teddy Oct 14, 2026
b34f862
feat: enhance admin shell with collapsible sidebar and updated styles
daniel-teddy Oct 14, 2026
1c7d4f6
refactor: swap logout and collapse button functionalities in AdminShell
daniel-teddy Oct 14, 2026
3ea4b1b
refactor: restructure AdminShell layout and components for improved o…
daniel-teddy Oct 14, 2026
38db53b
feat: add logout icon to AdminNavIcon and update AdminShell references
daniel-teddy Oct 14, 2026
0e714c2
feat: integrate Gravatar support and user avatar display in AdminShell
daniel-teddy Oct 14, 2026
e7f2564
feat: add AuditLogDetailDialog and enhance PaymentAuditLogTable with …
daniel-teddy Oct 14, 2026
ae87db0
feat: enhance payment audit logging with geolocation data
daniel-teddy Oct 14, 2026
7d16f3e
feat: enhance Landing page with Trust and Process sections
daniel-teddy Oct 15, 2026
f1e00db
feat: implement growth engine with admin UI for lead scoring and mana…
daniel-teddy Oct 15, 2026
b59b2af
feat: add growth connector CLI and API for session management
daniel-teddy Oct 15, 2026
cd6f468
feat: enhance growth connector with session health tracking and new C…
daniel-teddy Oct 15, 2026
fb1b2b9
feat: introduce growth connect server and enhance admin UI for sessio…
daniel-teddy Oct 15, 2026
244eddd
feat: implement growth connect server with hosted and relay modes
daniel-teddy Oct 15, 2026
8d6b730
fix: improve local development experience for growth connect server
daniel-teddy Oct 15, 2026
21322b7
feat: integrate Playwright for enhanced local development and session…
daniel-teddy Oct 15, 2026
2c7d2bd
feat: enhance GrowthConnectPanel with headed and streaming session su…
daniel-teddy Oct 15, 2026
b82e63b
feat: implement Growth Harvest functionality with new UI components a…
daniel-teddy Oct 15, 2026
fc3933a
feat: enhance Growth Harvest functionality with improved extraction a…
daniel-teddy Oct 15, 2026
31b7d24
feat: enhance Growth Engine with personalized reply drafts and profil…
daniel-teddy Oct 15, 2026
29b148a
feat: refactor admin navigation and integrate growth sub-navigation i…
daniel-teddy Oct 15, 2026
d78bc48
feat: add AI regeneration endpoint for drafts and enhance growth fetc…
daniel-teddy Oct 15, 2026
832f836
feat: add AI debugging capabilities to Growth Engine
daniel-teddy Oct 15, 2026
39c3fb5
feat: enhance Growth Engine with new AI reply sanitization and fallba…
daniel-teddy Oct 15, 2026
4a0431f
feat: implement lead sorting and enhance inbox panel display
daniel-teddy Oct 15, 2026
fb015f2
feat: enhance Growth components with account display and session mana…
daniel-teddy Oct 15, 2026
556d774
feat: implement posting replies on X with new API and UI enhancements
daniel-teddy Oct 15, 2026
d52d205
feat: enhance draft reply functionality for X platform
daniel-teddy Oct 15, 2026
2ea028d
feat: enhance X reply posting functionality with improved UI and help…
daniel-teddy Oct 15, 2026
692a505
feat: add platform filtering to inbox and leads API endpoints
daniel-teddy Oct 15, 2026
bbc876a
feat: enhance Growth Engine with platform filtering and improved inbo…
daniel-teddy Oct 15, 2026
5e3aa06
feat: implement contract management features in admin panel
daniel-teddy Oct 19, 2026
af49a34
feat: enhance contract management with payment links and tracking fea…
daniel-teddy Oct 19, 2026
eff8b5c
feat: introduce brand document components and styles for invoices and…
daniel-teddy Oct 19, 2026
8a6c0a7
feat: update contract and invoice components for improved layout and …
daniel-teddy Oct 19, 2026
1748a63
refactor: clean up contract detail and review components for improved…
daniel-teddy Oct 19, 2026
1bd5c50
feat: enhance document printing and layout for invoices and contracts
daniel-teddy Oct 19, 2026
bcd9402
feat: introduce ClientContractDocumentPreview and DocumentA4Preview c…
daniel-teddy Oct 19, 2026
d5ca232
feat: refactor BrandDocumentShell for improved A4 layout handling
daniel-teddy Oct 19, 2026
c55db93
refactor: update A4 fixed layout styles for improved document present…
daniel-teddy Oct 19, 2026
a50eee8
fix: resolve react-hooks/set-state-in-effect lint failures for CI
daniel-teddy Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
/out/
/.open-next/
/.wrangler/
.wrangler-secrets.tmp.json

# production
/build
Expand Down
139 changes: 129 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,55 @@
# Hey, we're Stackwise 👋
<div align="center">
<img src="docs/images/mark.svg" alt="Stackwise mark" width="88" />
<h1>Stackwise Technologies</h1>
<p>
International software engineering with African roots — AI systems, cloud infrastructure,
and digital products that are secure, scalable, and beautifully designed.
</p>
<p>
<a href="https://stackwisetechnologies.com"><img alt="Website" src="https://img.shields.io/badge/website-stackwisetechnologies.com-541111?style=flat-square" /></a>
<a href="https://github.com/stackwise-technologies"><img alt="GitHub" src="https://img.shields.io/badge/GitHub-stackwise--technologies-181717?style=flat-square&logo=github" /></a>
</p>
<p>
<img width="1983" height="793" alt="Stackwise Banner" src="https://github.com/user-attachments/assets/4a7f3e2c-aa94-42b7-af0d-0cfe5fc7a8e9" />
</p>
</div>

<details>
<summary>Table of Contents</summary>

- [About](#-about)
- [What we build](#-what-we-build)
- [Tech stack](#️-our-tech-stack)
- [Website (this repo)](#️-website-this-repo)
- [Open source](#️-open-source-commitment)
- [Let's build together](#-lets-build-together)
</details>

---

## 🌍 About

<p align="center">
<img width="1983" height="793" alt="Stackwise Banner" src="https://github.com/user-attachments/assets/4a7f3e2c-aa94-42b7-af0d-0cfe5fc7a8e9" />
<img src="docs/images/readme-about.jpg" alt="Stackwise — engineering at the speed of your business" width="100%" />
</p>

We're an international software engineering company with African roots, building scalable software, AI systems, cloud infrastructure, and digital products for businesses worldwide. Our mission is to accelerate business growth by delivering world-class technology solutions that are secure, scalable, and beautifully designed.
We're an international software engineering company with African roots. We don't just write code; we solve business problems — from AI-powered workflows to production payments, cloud platforms, and product delivery for teams worldwide.

**Website:** [stackwisetechnologies.com](https://stackwisetechnologies.com)

<p align="right"><a href="#stackwise-technologies">(back to top)</a></p>

---

## 🌍 What we build

At Stackwise, we take a strategic approach to software engineering. We don't just write code; we solve business problems.
<details open>
<summary><strong>Quick overview</strong></summary>
<br />
<p align="center">
<img src="docs/images/readme-stack.jpg" alt="AI · Cloud · Apps — built for scale" width="100%" />
</p>
</details>

### 🤖 AI & Automation
We integrate intelligent systems into your workflows. From AI-powered assistants and predictive analytics to automated operational tooling, we help companies reduce manual work and scale efficiently.
Expand All @@ -27,6 +66,15 @@ We develop secure RESTful and GraphQL APIs that power everything from mobile app
### 🧩 Developer Tools
We build utilities and open-source packages that help other engineers work faster, smarter, and with fewer friction points.

### 💳 Payments & subscriptions
<p align="center">
<img src="docs/images/readme-payments.jpg" alt="Secure payments — Paystack, KPay, receipts" width="100%" />
</p>

This repo also powers Stackwise’s client payment flows: one-time invoices (Paystack card + KPay Mobile Money), printable receipts, and Paystack recurring maintenance subscriptions.

<p align="right"><a href="#stackwise-technologies">(back to top)</a></p>

---

## 🛠️ Our Tech Stack
Expand All @@ -38,6 +86,7 @@ We utilize a modern, battle-tested technology stack to ensure our products are r
- **Database:** PostgreSQL, MongoDB, Redis, Firebase
- **Cloud & DevOps:** AWS, Google Cloud, Docker, Kubernetes, CI/CD
- **AI/ML:** OpenAI, LangChain, TensorFlow
- **Payments:** Paystack, KPay, Neon Postgres

---

Expand Down Expand Up @@ -66,26 +115,96 @@ Locales:
| `npm run lint` | ESLint |
| `npm test` | Unit tests (Vitest) |
| `npm run typecheck` | TypeScript (`tsc --noEmit`) |
| `npm run db:migrate` | Apply SQL migrations to Neon (uses `.env.local` → `.env.prod` → `.env`) |
| `npm run db:migrate:prod` | Apply migrations to **production** Neon (`MIGRATE_ENV=prod`, reads `.env.prod` only) |
| `npm run db:reset:prod-payments` | Dry-run cleanup of sandbox rows in prod Neon; pass `--confirm` to apply |
| `npm run preview` | Build OpenNext worker and preview in `workerd` via Wrangler |
| `npm run build:worker` | Build the Cloudflare Worker bundle only |
| `npm run deploy` | Build + deploy to Cloudflare Workers |
| `npm run deploy:live` | Build + deploy current branch/commit as the **live** production Worker (tagged) |
| `npm run deploy:live` | Full production deploy — see [Deploy to production](#deploy-to-production) |
| `npm run cf:secrets` | Upload Worker secrets from `.env.prod` without redeploying |
| `npm run cf:whoami` | Show Cloudflare auth account |
| `npm run cf:status` | Show the live Workers deployment status |

### Deploy from your machine
### Environment files

| File | Purpose |
| --- | --- |
| `.env.local` | Local development (gitignored). Copy from `.env.example`. |
| `.env.prod` | Production secrets and config (gitignored). Used by deploy and prod migrations. |
| `.env.example` | Template with placeholder keys — safe to commit. |

Never commit `.env.local` or `.env.prod`.

### Database migrations

Migrations live in `migrations/*.sql` and are applied in filename order.

```bash
# Local / dev Neon
npm run db:migrate

# Production Neon (uses DATABASE_URL from .env.prod)
npm run db:migrate:prod
```

The app also runs `ensureSchema()` on first DB access, which applies any pending migration files automatically.

### Deploy to production

You do not need GitHub Actions or the Cloudflare dashboard to ship:

```bash
# one-time: log in if needed
# One-time: log in to Cloudflare
npx wrangler login

# ship the current branch as production
# Create .env.prod with production values (see .env.example)
# Then ship:
npm run deploy:live
```

`deploy:live` tags the Worker version with the current git branch and short SHA (and marks `-dirty` if you have uncommitted changes), then rolls it out to 100% production traffic.
#### What `npm run deploy:live` does

Runs `scripts/deploy-live.sh`, which:

1. **Checks auth** — exits if `wrangler whoami` fails.
2. **Build env** — copies `.env.prod` → `.env.production.local` so `NEXT_PUBLIC_*` (e.g. site URL) is baked into the Next.js build, not localhost from `.env.local`.
3. **Sync secrets** — calls `scripts/sync-cloudflare-env.mjs` to upload every key in `.env.prod` to the `stackwise-technologies` Worker via `wrangler secret bulk`.
4. **Build** — runs `npm run build:worker` (OpenNext + Next.js production build).
5. **Deploy** — publishes to Cloudflare Workers at 100% traffic, tagged with git branch + short SHA (e.g. `main@abc1234`).

#### Sync secrets only (no redeploy)

After editing `.env.prod`, push new secrets without rebuilding:

```bash
npm run cf:secrets
# equivalent to: node scripts/sync-cloudflare-env.mjs .env.prod
```

Requires `wrangler` login. Uploads all non-comment `KEY=value` lines from the file as encrypted Worker secrets.

#### Script reference (`scripts/`)

| File | Invoked by | Description |
| --- | --- | --- |
| `scripts/deploy-live.sh` | `npm run deploy:live` | End-to-end production deploy: env, secrets, build, publish. |
| `scripts/sync-cloudflare-env.mjs` | `npm run cf:secrets`, `deploy-live.sh` | Parses an env file and runs `wrangler secret bulk` for Worker `stackwise-technologies`. Optional arg: path to env file (default `.env.prod`). |
| `scripts/migrate.mjs` | `npm run db:migrate`, `npm run db:migrate:prod` | Loads env files, connects to Neon, runs all `migrations/*.sql` in order. Set `MIGRATE_ENV=prod` to force `.env.prod`. |
| `scripts/db-reset-prod-payments.mjs` | `npm run db:reset:prod-payments` | Removes test/sandbox payment links from production Neon and marks remaining drafts as live (`kpay_is_test = false`). Dry-run by default; `--confirm` to apply. |

### Admin & payments (local)

- Admin dashboard: [http://localhost:3000/admin](http://localhost:3000/admin)
- Payment admin uses Neon Postgres, Paystack (card), KPay (Mobile Money), and SMTP — configure in `.env.local`.
- For local payment E2E, set `NEXT_PUBLIC_SITE_URL=http://localhost:3000` in `.env.local`.
- See [docs/PAYMENTS.md](docs/PAYMENTS.md) for payment flow, receipts, and legal notices.

### Payments legal & compliance

Customer payment pages (`/pay/*`) include a legal notice linking to [Payment processing & data](/pay/legal). See [docs/PAYMENTS.md](docs/PAYMENTS.md) for how payments, receipts, and personal data are handled.

<p align="right"><a href="#stackwise-technologies">(back to top)</a></p>

---

Expand All @@ -104,7 +223,7 @@ We're always excited to discuss new ideas, solve complex problems, and build the
📫 **Get in touch:**
- **Website:** [https://stackwisetechnologies.com](https://stackwisetechnologies.com)
- **Email:** info@stackwisetechnologies.com
- **Book a Call:** [Schedule a 30-min discovery call](https://calendly.com/stackwisetechnologies-info/30min)
- **Book a call:** Cal.com discovery link (see `NEXT_PUBLIC_CAL_COM_BOOKING_URL` in env; guest `tshikombadaniel@gmail.com` is always prefilled)

<p align="center">
<i>Building the future, one line of code at a time.</i>
Expand Down
12 changes: 12 additions & 0 deletions deploy/growth-connect/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
FROM mcr.microsoft.com/playwright:v1.49.1-noble

WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci --omit=dev 2>/dev/null || npm install --omit=dev
COPY scripts/growth-browser-lib.mjs scripts/growth-connect-server.mjs ./scripts/

ENV GROWTH_CONNECT_HOST=0.0.0.0
ENV GROWTH_CONNECT_PORT=8080
EXPOSE 8080

CMD ["node", "scripts/growth-connect-server.mjs"]
18 changes: 18 additions & 0 deletions deploy/growth-connect/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Hosted growth connect (optional)

Use this when you **cannot** use Cloudflare Browser Rendering on the main Worker but still want connect **without a local terminal**.

1. Deploy this container (Fly.io, Render, Railway, etc.).
2. Set secrets on the container:
- `GROWTH_CONNECTOR_SECRET` (same as production Worker)
- `GROWTH_API_BASE` (e.g. `https://stackwise-technologies.com`)
3. On the **Cloudflare Worker**, set:
- `GROWTH_CONNECT_VIEWER_BASE` = public URL of this service (e.g. `https://growth-connect.fly.dev`)

The admin UI will proxy connect traffic through `/api/admin/growth/connect/relay` (same-origin iframe). No terminal on your laptop.

Build from repo root:

```bash
docker build -f deploy/growth-connect/Dockerfile -t growth-connect .
```
Loading
Loading