塑造个人品牌,发现细分市场,构建可持续盈利的产品
개인 브랜드 구축·세분화 시장 발굴·지속 가능한 수익 제품 만들기를 공유
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.