{{ title }}
+ {% if description %} +{{ description }}
+ {% endif %} {% endunless %} +
+
+Deployed on the superfast [Netlify](https://www.netlify.com/) platform.
+
+## License
MIT Licensed
-Copyright (c) 2016-2019 Kushagra Gour, [webmakerapp.com](https://webmakerapp.com)
+Copyright (c) 2016-2026 Kushagra Gour, [webmaker.app](https://webmaker.app)
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 00000000..755dfe22
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,25 @@
+## Release steps for Chrome extension
+
+- Checkout master
+- Update changelog and commit
+- Change version in following places:
+ - app.jsx
+ - options.html
+ - package.json
+ - manifest.json
+- commit and tag (`git tag {version}`)
+- Conditional code changes for extension:
+ - Remove base tag from index.ejs
+ - Remove auth code for signInWithPopup
+ - Remove ga.js loading in analytics.js and add window.ga = () => {};
+ - Remove lemonsqueezy.js script loading from useCheckout.js
+ - Change import from 'firebase/auth' to 'firebase/auth/web-extension'
+- Run `gulp buildExtension`. This will generate a folder called `extension`.
+- Test out the extension by loading the `extension` folder.
+- If everything is good, push to master.
+- Zip the folder and submit to webstore.
+
+## Sidenotes
+
+- The /preview folder needs to hosted on separate domain (wbmakr.com on production)
+- Whenever something changes in /preview folder, the built version of /preview (inside /create) needs to re-uploaded
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000..6d23902d
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,3 @@
+# Reporting Security Issues
+
+Please report any security issue to chinchang457@gmail.com
diff --git a/collab-server/.gitignore b/collab-server/.gitignore
new file mode 100644
index 00000000..713d5006
--- /dev/null
+++ b/collab-server/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+.env
diff --git a/collab-server/README.md b/collab-server/README.md
new file mode 100644
index 00000000..1cd785e5
--- /dev/null
+++ b/collab-server/README.md
@@ -0,0 +1,41 @@
+# Web Maker Collab Server
+
+WebSocket server for Web Maker's real-time collaboration feature using y-websocket.
+
+## Deploy to Railway
+
+1. **Create a new project on Railway**
+
+ - Go to [railway.app](https://railway.app)
+ - Click "New Project" → "Deploy from GitHub repo"
+ - Select your repo and set the **root directory** to `collab-server`
+
+2. **Get your deployment URL**
+
+ - Railway will provide a URL like `your-app.up.railway.app`
+ - Railway provides WSS (secure WebSocket) automatically
+
+3. **Update Web Maker**
+ - Edit `src/constants.js` in the main Web Maker project
+ - Set `COLLAB_SERVER_URL` to `wss://your-app.up.railway.app`
+
+## Local Development
+
+```bash
+cd collab-server
+npm install
+npm start
+```
+
+Server runs on `ws://localhost:1234` (default y-websocket port)
+
+Or from the main project root:
+
+```bash
+npm run start:collab
+```
+
+## Environment Variables
+
+- `PORT` - Server port (Railway sets this automatically)
+- `HOST` - Bind address (set to 0.0.0.0 for Railway)
diff --git a/collab-server/package.json b/collab-server/package.json
new file mode 100644
index 00000000..9173afcc
--- /dev/null
+++ b/collab-server/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "webmaker-collab-server",
+ "version": "1.0.0",
+ "description": "WebSocket server for Web Maker real-time collaboration",
+ "main": "server.js",
+ "scripts": {
+ "start": "HOST=0.0.0.0 npx y-websocket"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "dependencies": {
+ "y-websocket": "^3.0.0"
+ }
+}
diff --git a/cypress.json b/cypress.json
new file mode 100644
index 00000000..25f81c54
--- /dev/null
+++ b/cypress.json
@@ -0,0 +1,3 @@
+{
+ "chromeWebSecurity": false
+}
diff --git a/cypress/fixtures/libraries.json b/cypress/fixtures/libraries.json
new file mode 100644
index 00000000..c7b05dca
--- /dev/null
+++ b/cypress/fixtures/libraries.json
@@ -0,0 +1,38 @@
+{
+ "jsLibs": [
+ {
+ "urlPref": "https://code.jquery.com/jquery",
+ "label": "jQuery"
+ },
+ {
+ "urlPref": "https://ajax.googleapis.com/ajax/libs/angularjs/",
+ "label": "Angular"
+ },
+ {
+ "urlPref": "https://cdnjs.cloudflare.com/ajax/libs/react/",
+ "label": "React"
+ },
+ {
+ "urlPref": "https://cdnjs.cloudflare.com/ajax/libs/react-dom/",
+ "label": "React DOM"
+ },
+ {
+ "urlPref": "https://unpkg.com/vue/dist/vue.min.js",
+ "label": "Vue.js"
+ }
+ ],
+ "cssLibs": [
+ {
+ "urlPref": "https://cdnjs.cloudflare.com/ajax/libs/bulma/",
+ "label": "Bulma"
+ },
+ {
+ "urlPref": "https://cdnjs.cloudflare.com/ajax/libs/hint.css/",
+ "label": "Hint.css"
+ },
+ {
+ "urlPref": "https://cdn.jsdelivr.net/npm/tailwindcss/dist/tailwind.min.css",
+ "label": "Tailwind.css"
+ }
+ ]
+}
diff --git a/cypress/integration/console.test.js b/cypress/integration/console.test.js
new file mode 100644
index 00000000..239d5d15
--- /dev/null
+++ b/cypress/integration/console.test.js
@@ -0,0 +1,64 @@
+/// {{ description }}
+ {% endif %} +{{ description }}
+ {% endif %} {% endunless %} +{{ subtitle }}
+ + +- Recommended: Works Offline! More features. More fun! -
- -
+ // the offline code editor for
HTML · CSS · JavaScript
+
+
+
+ @@ -547,29 +1467,29 @@