{"id":21980071,"url":"https://github.com/laststance/nsx","last_synced_at":"2025-04-30T04:35:29.694Z","repository":{"id":37004673,"uuid":"304688566","full_name":"laststance/nsx","owner":"laststance","description":"Auto post of web page list you read that day.","archived":false,"fork":false,"pushed_at":"2025-04-24T20:03:51.000Z","size":26650,"stargazers_count":10,"open_issues_count":3,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-24T20:42:40.179Z","etag":null,"topics":["express","full-stack","fullstack-typescript","react","storybook","tailwindcss","vite"],"latest_commit_sha":null,"homepage":"https://nsx.malloc.tokyo/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/laststance.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-16T16:59:25.000Z","updated_at":"2025-04-24T20:03:55.000Z","dependencies_parsed_at":"2023-12-25T23:29:29.738Z","dependency_job_id":"f6430007-c864-456d-a4d1-271f83c1a7f6","html_url":"https://github.com/laststance/nsx","commit_stats":null,"previous_names":["ryota-murakami/nsx","laststance/nsx"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laststance%2Fnsx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laststance%2Fnsx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laststance%2Fnsx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/laststance%2Fnsx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/laststance","download_url":"https://codeload.github.com/laststance/nsx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251644262,"owners_count":21620617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["express","full-stack","fullstack-typescript","react","storybook","tailwindcss","vite"],"created_at":"2024-11-29T17:09:28.156Z","updated_at":"2025-04-30T04:35:29.686Z","avatar_url":"https://github.com/laststance.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build](https://github.com/laststance/nsx/actions/workflows/build.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/build.yml)\n[![Typecheck](https://github.com/laststance/nsx/actions/workflows/typecheck.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/typecheck.yml)\n[![Test](https://github.com/laststance/nsx/actions/workflows/test.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/test.yml)\n[![Lint](https://github.com/laststance/nsx/actions/workflows/lint.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/lint.yml)\n[![Chromatic](https://github.com/laststance/nsx/actions/workflows/chromatic.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/chromatic.yml)\n[![Playwright Admin Tests](https://github.com/laststance/nsx/actions/workflows/playwright_admin.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/playwright_admin.yml)\n[![Playwright Selfhost Tests](https://github.com/laststance/nsx/actions/workflows/playwright_selfhost.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/playwright_selfhost.yml)\n[![Playwright Visitor Tests](https://github.com/laststance/nsx/actions/workflows/playwright_visitor.yml/badge.svg)](https://github.com/laststance/nsx/actions/workflows/playwright_visitor.yml)\n\n\u003e # Project Status: currently under development and scheduled for release in release 2028.\n\u003e\n\u003e The ultimate goal for this project is release it as a personal blog starter kit for React developers like Minimal Wordpress.  \n\u003e I'm developping essential feature while my spare time, currenty I planning release v1 2028.  \n\u003e All core feature implemented completely, I'm planning distribute repo source directly as similar as [Beam](https://github.com/planetscale/beam).\n\u003e [Roadmap](https://github.com/laststance/nsx/projects/1)\n\n# NSX\n\n\u003ca src=\"https://nsx.malloc.tokyo/\"\u003e\n  \u003cimg src=\"https://digital3.nyc3.cdn.digitaloceanspaces.com/nsx.gif\" /\u003e\n\u003c/a\u003e\n\n⚛️ [Production](https://nsx.malloc.tokyo/) ✅ [Storybook](https://main--61c089c06b3b4d003adde63b.chromatic.com)\n\nAuto post of web page list you read that day.\n\nUsed in combination with [nsx-browser-extension](https://github.com/laststance/nsx-browser-extension).\n\n# Prerequisites\n\n- Node.js v20.x.x\n- pnpm\n\n#### Install [Docker Desktop](https://www.docker.com/products/docker-desktop/)\n\n# Getting start local development\n\n1. `git clone https://github.com/laststance/nsx.git`\n1. `cd nsx`\n1. `pnpm install`\n1. `cp .env.sample .env`\n1. `docker-compose up -d`\n1. `pnpm db:reset`\n1. `pnpm validate`\n1. `pnpm server:start`\n1. in other terminal screen `pnpm start`\n1. `pnpm e2e:admin`\n1. then, you confirmed local develop environment working fine.\n\nopen sidebar press `x` key\nDB seeds initial user account is  \nname: `John Doe`  \npass: `popcoon`\n\n## Enviroment Variables\n\nThese are storing `.env` and evaluate at build time.\n\n| Variable Name         | Role                | other |\n| --------------------- | ------------------- | ----- |\n| VITE_APP_TITLE        | title               |       |\n| VITE_APP_DESCRIPTION  | desc                |       |\n| VITE_API_ENDPOINT     | end                 |       |\n| VITE_SENTRY_DNS       | sentry              |       |\n| VITE_GA_TRACKING_CODE | ga                  |       |\n| ACCESS_TOKEN_SECRET   | JWT                 |       |\n| DATABASE_URL          | Database            |       |\n| BROWSER               | open via dev server |       |\n\n## Playwright\n\nI'm using [Playwright](https://playwright.dev/) for E2E testing.  \nBefore run `pnpm playwright`, you need to run `pnpm build:e2e`.\n\n## Production Server\n\n- commands\n\n```\n\npm2 start ecosystem.config.js    // Start Server with production mode\npm2 restart ecosystem.config.js  // Restart Server with production mode\npm2 stop 0                       // Stop server\npm2 ps -a                        // Show all processes\n\n```\n\n## Setup Procution Server\n\n1. Setup Ubuntu server on [Digital Ocean](https://www.digitalocean.com/) or [Fly.io](https://fly.io/)\n1. Update ubuntu with `apt upgrade`\n1. see https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-22-04\n1. `cd ~ \u0026\u0026 git clone https://github.com/laststance/nsx.git`\n1. `cd nsx` and install [volta](https://volta.sh/)\n1. `source ~/.bashrc` \u0026\u0026 `volta install node`\n1. `pnpm`\n1. install docker on Ubuntu https://docs.docker.com/engine/install/ubuntu/#set-up-the-repository\n1. docker compose up -d\n1. pnpm db:migrate\n1. touch .env.prod\n1. npm i -g pm2\n1. `touch .env \u0026\u0026 echo \"ACCESS_TOKEN_SECRET=$(openssl rand -base64 60 | tr -d '\\n' | cut -c1-60)\" \u003e\u003e .env`\n1. `pm2 start ecosystem.config.js`\n1. Access from browser\n\n## Deploy Flow\n\n```\nGitHub Repository (main branch)\n       │\n       │ Push / PR Merge\n       ▼\nGitHub Actions Workflow\n       │\n       │ 1. Checkout code\n       │ 2. Setup Node.js \u0026 pnpm\n       │ 3. Install dependencies\n       │ 4. Build frontend \u0026 backend\n       ▼\n   Build Artifacts\n       │\n       │ Upload via SCP\n       ▼\nDigitalOcean Server\n       │\n       │ 1. Create .env from secrets\n       │ 2. Install production dependencies\n       │ 3. PM2 restart\n       ▼\nRunning Application (https://nsx.malloc.tokyo/)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaststance%2Fnsx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaststance%2Fnsx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaststance%2Fnsx/lists"}