塑造个人品牌,发现细分市场,构建可持续盈利的产品
I share how to build a personal brand, discover niche markets, and create sustainably profitable products. I also share everything about AI.
AI translation
PublyApp keeps your whole team and every channel moving together — from first draft to published.
MarketingTypeScript · C#GitHub @PublyAppOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗PublyApp is a full-stack SaaS foundation for teams operating across multiple organizations and projects. The repository combines a .NET 10 API, a React 19 frontend built with TanStack Start, PostgreSQL, background jobs, database migrations, and a TypeScript client generated from the API's OpenAPI contract.
The platform has three distinct operating scopes:
| Scope | Purpose |
|---|---|
| Staff | Platform-wide administration and support across tenants. |
| Tenant | Organization-level users, settings, and operations. |
| Project | A workspace boundary inside a tenant. |
Staff and tenant/project accounts are mutually exclusive. This keeps the platform-administration boundary separate from tenant data and permissions.
PublyApp already carries the core post and publishing pipeline. The product direction is to turn it into a complete multi-network workspace, with richer calendar, queue, planning, and review experiences. Those end-to-end product surfaces remain active development areas; partial workflows are not presented as complete.
justOn Windows, the justfile requires PowerShell 7 (pwsh).
cp .env.example .env.development
just dev
just dev stays attached and runs the whole stack: it applies pending
migrations, then starts persistent PostgreSQL (host port 5454), the API
(5000), the worker, and the frontend (5050). just dev <pr|issue|branch> runs
the same stack from the matching worktree, creating it when missing. Branches
created before #2305 must be updated with develop first.
| Service | Local address |
|---|---|
| Frontend | http://localhost:5050 |
| API | http://localhost:5000 |
| API reference (Scalar) | http://localhost:5000/scalar/v1 |
| PostgreSQL | localhost:5454 |
Do not start just dev-api alongside just dev; the AppHost already owns
port 5000. For the single-piece recipes and environment rules, read the
development commands in AGENTS.md.
flowchart LR
Browser["apps/front<br/>React 19 · TanStack Start"]
Client["packages/client-ts<br/>generated by Kiota"]
API["apps/api<br/>.NET 10 Minimal API"]
Handlers["handlers · services"]
DB[("PostgreSQL 18")]
Worker["worker<br/>same API image"]
Migrator["one-shot migrator"]
Browser --> Client
Client -->|X-Session-Token · X-Tenant-Id| API
API --> Handlers --> DB
Worker --> DB
Migrator --> DB
API -. OpenAPI .-> Client
The backend uses domain-first vertical slices: endpoints map routes and permissions, handlers orchestrate an operation, and domain services own business logic and data access. Authenticated frontend data stays client-side and flows through TanStack Query and the generated API client.
apps/
├── api/ # API, worker runtime, and migrator source
└── front/ # shipped TanStack Start frontend
packages/
├── client-ts/ # generated API client; never edit by hand
├── shared-ts/ # shared validation, types, and i18n
├── lint-ts/ # custom TypeScript lint rules
├── lint-cs/ # custom Roslyn analyzers
└── scripts-cs/ # .NET code-generation tools
Read the focused guides for the full rules:
The TypeScript client is generated from the backend's OpenAPI document. After changing an endpoint or wire contract, regenerate and type-check it:
just build-api
just generate-client
pnpm --filter front typecheck
Never hand-edit packages/client-ts; regeneration replaces its contents.
The repository uses just for its supported workflows. just --list is the
full command reference; these are the common entry points:
| Command | Purpose |
|---|---|
just dev | Run the complete local stack. |
just build-api | Build the API and emit OpenAPI. |
pnpm --filter front build | Build the shipped frontend. |
just test-api | Run API integration tests with Testcontainers. |
pnpm --filter front test | Run frontend tests and their existing guards. |
just lint && just format | Apply lint and formatting fixes. |
just ci | Run the local pre-push gate, including the API suite. |
just ci-full | Add both end-to-end suites to the pre-push gate. |
GitHub Actions also runs the API, frontend, contract, documentation, and security gates required for pull requests. See the local CI guide for the exact local/hosted mapping and known gaps.
Pull requests land on develop through GitHub's merge queue: the combination of
your branch and the current develop is tested as one merge group before it
lands, so two pull requests that are each green cannot break develop together
(#1889).
Start with CONTRIBUTING.md, then read AGENTS.md,
the source of truth for this repository's architecture and coding conventions.
The latter applies to both human contributors and coding agents.
Contributors sign the CLA once by adding themselves to
CLA-SIGNATURES.md and including the acceptance statement
described in the agreement.
Useful rules to know before opening a pull request:
apps/front; the retired frontend is not in this tree.apps/api/Modules/<Domain>/.401.The repository publishes three release images — api, migrate, and front.
The declared Dokploy topology runs four services: API, worker (from the API
image), one-shot migrator, and frontend. All release images share one immutable
commit tag.
Operational details live in the maintained deployment documents:
The source in this repository is licensed under the
Apache License 2.0. See NOTICE for attribution and the
repository scope.
PublyApp uses an open-core model. Paid modules distributed separately as
closed-source binaries are not part of this repository and are not covered by
its Apache-2.0 licence. Contributions to this repository are governed by the
CLA, under which contributors keep their copyright while granting
the project the rights described there.