A platform for new developers to code, blog, and share their learning journey!
- π― Project Overview
- π Getting Started
- β Key Features
- π οΈ Tech Stack
- π API Examples
- π Future Improvements
- π€ For future contributions
Scriptorium is a full-stack application that allows new coders to:
-
Write and execute code in multiple programming languages securely using Docker containers. ‡

-
Blog about coding topics and interact with a developer community by commenting and liking. ‡

-
Create, share, and discover code templates for personal learning and sharing progress. ‡

Scriptorium was built to provide a single platform for new developers to blog their coding journey and learn by doing!
- Node.js 18+
- npm 9+ or yarn 1.22+
- Docker 20+ (for code execution)
- Git 2.30+
Run this command in your terminal after cloning the repository:
chmod +x startup.sh && ./startup.sh && chmod +x run.sh && ./run.sh** Running this script will install all dependencies, set up the database, build Docker images, and start the server for you!**
Visit http://localhost:3000 to get started!
| Feature | Description |
|---|---|
| Secure Code Execution | Code execution in multiple languages inside secure Docker containers |
| Template Management | Create, fork, and share code templates |
| Blogging Platform | Blog with comments and ratings |
| User System | Authentication and profiles |
| Content Moderation | Reporting, moderation and Admin tools |
| Advanced Search | Search and discovery of blogs and templates |
| Theme Support | Light/dark mode design |
- Next.js 14 - React framework with App Router
- React 18 - UI library
- TypeScript 5.7.2 - Type-safe JavaScript
- Tailwind CSS 3.4.15 - Utility-first CSS framework
- CodeMirror 6.0.2 - Code editor with syntax highlighting
- Next.js API Routes - Serverless API endpoints
- Prisma ORM 5.21.1 - Type-safe database operations
- SQLite - Database
- JWT - Authentication
- Bcrypt - Password hashing
- Docker - Containerized execution environments
- Multiple language runtimes (Python, JavaScript, C++, Java, Go, PHP, Rust, SQL, Ruby, C#, C)
API Test Points from documentation or Postman API Testing Suite
curl -X POST http://localhost:3000/api/accounts/sign-up \
-H "Content-Type: application/json" \
-d '{
"firstName": "Test",
"lastName": "This",
"email": "example1@example.com",
"password": "password123",
"avatar": "/avatars/avatar1.png",
"phoneNumber": "123-456-7890"
}'Response:
{
"message": "User created successfully",
"user": {
"id": 13,
"firstName": "Test",
"lastName": "This",
"email": "example1@example.com",
"avatar": "/avatars/avatar1.png",
"phoneNumber": "123-456-7890"
}
}curl -X POST http://localhost:3000/api/code-writing-and-execution/input \
-H "Content-Type: application/json" \
-d '{
"code": "print(input())",
"language": "python",
"input": "Hello World!"
}'Response:
{
"output": "Hello World!\n",
"error": ""
}curl -X POST "http://localhost:3000/api/code-templates/search-saved?userId=2" \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"query": "Python"
}'curl -X POST http://localhost:3000/api/code-templates/run-modify \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"templateId": 3,
"modifiedCode": "console.log(\"testing template 3 fork save!\");",
"saveAsFork": true
}'curl -X POST http://localhost:3000/api/blog-posts/create-blog \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"title": "New: Introduction to JavaScript",
"description": "This blog post provides an introduction to JavaScript, covering the basics of the language.",
"tags": ["javascript", "basics", "programming"],
"templateIds": [1, 2]
}'curl -X DELETE http://localhost:3000/api/blog-posts/create-blog \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"id": 7
}'curl -X POST http://localhost:3000/api/blog-posts/create-comment \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"content": "Nice post!",
"blogPostId": 2,
"parentId": 4,
"rating": 5
}'curl -X POST http://localhost:3000/api/blog-posts/ratings \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"blogPostId": 10,
"isUpvote": true
}'Response:
{
"message": "Blog post rating updated successfully!",
"upvotes": 1,
"downvotes": 2
}curl -X POST http://localhost:3000/api/icr/report \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"blogPostId": 4,
"reason": "The blog has harmful intent."
}'curl -X PUT http://localhost:3000/api/icr/hide-content \
-H "Authorization: Bearer {{accessToken}}" \
-H "Content-Type: application/json" \
-d '{
"blogPostId": 2
}'- Deploy using Vercel so multiple people can share their progress!
- Follow the existing code style
- Add comments for large blocks of logic
- Write meaningful commit messages
- Test your changes through Postman test suite