A Blog and Book Writing And Publishing Platform where people can connect, write, share, and publish.
MarkLink is a comprehensive platform designed for writers and readers to engage in a seamless ecosystem of content creation and consumption. Whether you're drafting your next novel, sharing a quick thought, or connecting with your favorite authors, MarkLink provides the tools you need.
- Advanced Editor: A powerful, notion-style editor based on Tiptap for a rich writing experience.
- Blogs & Books: Support for both short-form blog posts and long-form book publishing.
- Drafts: Save your work in progress and publish when ready.
- Moments: Share short, social-media-style posts to engage with your audience instantly.
- Chat: Real-time messaging to connect privately with other users and authors.
- Follow System: Build your network by following favorite authors and creators to stay updated with their latest work.
- Easy Sharing: Share your published stories and moments across platforms with a single click.
MarkLink is built using a modern, robust, and scalable technology stack:
- NestJS: A progressive Node.js framework for building efficient and scalable server-side applications.
- Drizzle ORM: TypeScript-first Object Relational Mapper for maximum type safety.
- PostgreSQL: Advanced open-source relational database.
- Better Auth: Secure authentication solution.
- tRPC: End-to-end typesafe APIs.
- React: The library for web and native user interfaces.
- TanStack Start: Full-stack React framework.
- TanStack Router: Type-safe routing for React applications.
- TanStack Query: Powerful asynchronous state management.
- Tailwind CSS: A utility-first CSS framework for rapid UI development.
- Shadcn UI: Beautifully designed components built with Radix UI and Tailwind CSS.
- Bun: Fast all-in-one JavaScript runtime and package manager.
Follow these instructions to set up the project locally.
Ensure you have the following installed on your machine:
- Bun (v1.x or higher)
- Node.js (v20 or higher - though Bun is the primary runtime)
- PostgreSQL (running locally or a cloud instance)
-
Clone the repository (if not already done):
git clone <repository-url> cd marklink
-
Install dependencies for the root workspace:
bun install
-
Install dependencies for the frontend:
cd ui bun install cd ..
-
Backend Environment: Duplicate the
.env.examplefile (if available) or create a.envfile in the root directory:cp .env.example .env
Make sure to update
DATABASE_URLand other secrets. -
Frontend Environment: Create a
.env.localfile in theuidirectory:cp ui/.env.example ui/.env.local
Use Drizzle Kit to push the schema to your database:
bun run db:pushYou can run the backend and frontend separately.
Start the NestJS server in development mode:
bun run start:devThe server will typically run on http://localhost:3000.
Open a new terminal window, navigate to the ui directory (if you want to run it directly from there) or use the root script if configured. Assuming you run it from the root specifically for the UI workspace:
bun run ui:devNote: Make sure you have a script ui:dev effectively running cd ui && bun run dev or navigate to ui and run bun run dev.
The frontend will be available at http://localhost:3001 (or the port specified in your Vite config).
marklink/
├── src/ # Backend (NestJS) source code
│ ├── app.module.ts
│ └── ...
├── ui/ # Frontend (React + TanStack) source code
│ ├── src/
│ │ ├── routes/
│ │ ├── components/
│ │ └── ...
├── drizzle/ # Database schema and migrations
├── package.json # Root scripts and dependencies
└── README.md # Project documentation
- Fork the repository.
- Create your feature branch (
git checkout -b feature/amazing-feature). - Commit your changes (
git commit -m 'Add some amazing feature'). - Push to the branch (
git push origin feature/amazing-feature). - Open a Pull Request.
This project is currently private/UNLICENSED.