30 min read

Set Up tick-stock-panel Dev Mode with Localtonet

Install and verify tick-stock-panel in development mode, then provide remote HTTP access to its FastAPI web app with Localtonet.

Self-Hosting Tutorials ยท tick-stock-panel ยท Docker Compose ยท Localtonet ยท 2026

Prepare the source-development environment locally, then use the verified Docker Compose entry point for controlled remote access

tick-stock-panel is a self-hosted A-share stock selection, monitoring, analysis, and backtesting workspace with a React frontend and FastAPI backend. This guide explains how to prepare its native development prerequisites, use the repository-provided development scripts, run the integrated Docker Compose build, verify the application locally, and connect the Compose HTTP endpoint through Localtonet. The repository evidence available for this revision does not establish a supported public topology for the split Vite and FastAPI development services, so we do not present port 3011 as a complete remote application. Remote access in this guide targets the integrated Compose service on port 3018 after local verification.

๐Ÿ”’ Verify locally before enabling remote access ๐ŸŒ Native development uses separate frontend and backend services โšก Remote access targets the integrated Compose endpoint
A local FastAPI application connected through an HTTP tunnel to a remote browser.
Localtonet carries remote HTTP requests to a locally verified application endpoint without requiring inbound router port forwarding.

What this guide supports and what it does not assume

tick-stock-panel, also identified as TSP in its repository, describes itself as a self-hosted quantitative workspace for Chinese A-share stock selection, monitoring, analysis, and backtesting. Its published architecture separates a React 18 presentation layer from a FastAPI application layer. The broader stack includes REST endpoints, server-sent events, Polars-based computation, Parquet storage, DuckDB, scheduled tasks, data-source plugins, research tools, and optional AI-assisted capabilities.

The repository presents two distinct ways to work with the application. Native development mode runs the frontend and backend as separate services so contributors can edit and debug their code. The documented addresses used by the existing setup are http://localhost:3011 for the frontend development server and http://localhost:3018 for the FastAPI backend. Docker Compose builds an integrated application whose browser entry point is http://localhost:3018.

These modes are not interchangeable. A Vite development server can apply host checks, proxy rules, origin handling, and hot-reload connection settings that differ from a built frontend. The browser may also need to reach the backend through a configured proxy or a separate origin. FastAPI can independently apply CORS policy, trusted-host checks, authentication, and streaming behavior. Server-sent events remain ordinary long-lived HTTP responses, but they still depend on the browser using the right public origin and API path.

The supplied repository extract confirms that files such as dev.sh, dev.ps1, .env.example, Dockerfile, and docker-compose.yml exist. It does not include their current contents. It therefore does not provide enough evidence to state the exact Vite proxy target, accepted hostnames, CORS origins, SSE URL construction, Compose mount paths, or every action performed by the development scripts. Rather than inventing those details, this guide keeps the split development stack local and uses the integrated Compose endpoint for the Localtonet workflow.

Remote-development boundary

This is a development setup guide and a Compose remote-access guide. It does not claim that tunneling port 3011 alone produces a supported remote development environment. Before publishing a split development stack, inspect the current Vite configuration, frontend API client, backend CORS and trusted-host middleware, SSE route construction, and hot-reload settings. Those source details were not included in the evidence available for this revision.

โš›๏ธ React development frontend Native development uses a frontend service on port 3011. Treat it as a local development endpoint unless the current repository configuration explicitly supports another hostname and remote origin.
๐Ÿ FastAPI backend The backend uses port 3018 in the documented development layout and provides the application's REST, SSE, monitoring, and scheduled-service layer.
๐Ÿ“ฆ Integrated Compose service The Docker Compose workflow provides the clear single browser entry point used for remote access in this guide: http://localhost:3018.
๐Ÿ’พ Local application data The project describes local Parquet-based data storage. The exact host paths or Docker mounts must be read from the checked-out Compose configuration before backup or destructive cleanup.
Research software and financial decisions

The current repository README says the project is maintained primarily as a personal open-source project for learning and research. It also says the project is not investment software, market-quotation software, an AI stock-recommendation product, or a price-limit prediction product. The supplied evidence does not include the text of the current LICENSE file, so this article does not claim a separate blanket prohibition on commercial use. Read the actual license, repository notices, third-party data terms, and applicable financial-data rules before deciding how the software may be used.

Install the prerequisites on a clean host

Choose the native development path or the Docker Compose path before installing tools. Native development requires Git, Python 3.11 or newer, Node.js 20 or newer, uv, and pnpm. The container path requires Git plus a Docker installation that provides the docker compose subcommand. You do not need to install every native runtime if you intend to use only Compose.

Install Git

Install Git using your operating system's supported package manager or the official Git installer. On Windows, use the regular Git for Windows installation and allow it to provide the git command to your terminal. On macOS, Git can be supplied by the command-line developer tools or a package manager. Linux distributions normally provide Git through their package repositories.

Open a new terminal after installation and verify it:

git --version

Install Python 3.11 or newer

Install a supported Python 3 release from your operating system's package channel or the official Python distribution. On Windows, make sure the installer makes Python available to the user account that will run tick-stock-panel. On macOS or Linux, do not replace a system-managed Python interpreter merely to satisfy this project. Install a separate current interpreter when the operating system depends on its own Python version.

Verify the interpreter in the terminal you will use for development:

python --version

Some macOS and Linux installations expose Python 3 as python3:

python3 --version

Continue only if the resolved interpreter is Python 3.11 or newer. If the command reports an older version, inspect the executable search path instead of assuming the newly installed interpreter is active.

Install Node.js 20 or newer

Install Node.js 20 or a newer version supported by the current project. An official installer, an operating-system package, or a version manager can provide Node.js. A version manager is particularly useful on a development workstation because it allows this repository to use an appropriate Node release without changing unrelated projects.

Confirm both Node.js and its bundled npm client:

node --version
npm --version

The Node.js result must be version 20 or newer. Restart the terminal if it still resolves an installation that was removed or upgraded.

Install uv

uv manages the Python environment and dependencies used by the native workflow. If the Python installation provides pip, one supported installation route is:

python -m pip install --user uv

When the host uses python3, use the matching interpreter:

python3 -m pip install --user uv

Open a new terminal if the user-level executable directory was added to the path during installation, then verify:

uv --version

If the command remains unavailable, inspect the location reported by pip and add the appropriate user executable directory through the normal operating-system process. Do not run the project with elevated privileges simply to work around a user-path problem.

Install pnpm

After Node.js and npm work, install pnpm for the same user account:

npm install --global pnpm

Confirm that the command resolves:

pnpm --version

Keep the project's lockfiles intact. Do not replace pnpm with npm or another package manager unless the repository explicitly documents that alternative, because different package managers can resolve dependencies differently.

Install Docker for the Compose path

Install a current Docker environment appropriate for the host. On desktop operating systems, ensure its engine is running. On Linux, ensure the account used for this tutorial can access the Docker engine under the host's approved security policy.

Verify the client and Compose plugin:

docker --version
docker compose version

A version response confirms that the commands are installed. It does not necessarily confirm that the Docker engine is reachable. Check engine access with:

docker info
Workflow Required host tools Local addresses Purpose in this guide
Linux or macOS development Git, Python 3.11+, Node.js 20+, uv, pnpm, and a shell for dev.sh Frontend on port 3011 and backend on port 3018 Local code editing and debugging
Windows development Git, Python 3.11+, Node.js 20+, uv, pnpm, and PowerShell for dev.ps1 Frontend on port 3011 and backend on port 3018 Local code editing and debugging
Docker Compose Git and Docker with Compose support Integrated browser entry point on port 3018 Local operation and the Localtonet workflow

Clone the repository and prepare configuration

Clone the current repository into a user-owned development directory:

git clone https://github.com/shy3130/tick-stock-panel.git
cd tick-stock-panel

Before executing scripts, confirm that the expected project files are present:

git status
git branch --show-current

The repository includes .env.example as its environment template. Create a local .env file on Linux or macOS:

cp .env.example .env

In PowerShell:

Copy-Item .env.example .env

Distinguish required settings from optional integrations

Treat the checked-out .env.example as the source of truth for variable names. The current README describes configurable data-source capabilities and an optional OpenAI-compatible AI interface. It also states that the AI assistant fails closed when no suitable AI key is configured, directing the operator to settings instead of silently pretending that the feature works.

That supports the following practical distinction:

  • Preserve every variable name and syntax shown in .env.example.
  • Configure the data sources needed for the project features you intend to use.
  • Treat AI-provider credentials as optional unless you intend to enable the AI functionality.
  • Do not invent values for empty credentials, service URLs, feature flags, or provider-specific settings.
  • Do not assume that a value is optional merely because the application starts without it. A corresponding feature may remain unavailable.

The actual current contents of .env.example were not included in the supplied evidence, so this article cannot accurately label every individual variable as required or optional. Review the comments and defaults in your checkout. If a variable is not documented there or in the repository instructions, leave it unchanged until its behavior is established.

Keep credentials out of source control

The .env file can contain data-source and AI-provider credentials. Confirm that it remains untracked with git status, and never include it in screenshots, bug reports, container images, or commits. A Localtonet device token identifies a client device and must also remain private. Do not store that token in tick-stock-panel configuration unless current Localtonet documentation explicitly requires such a workflow.

Inspect supplied scripts before running them

The repository provides dev.sh and dev.ps1, but the available evidence does not contain their source. Before execution, open the script for your platform in a text editor and identify:

  • Whether it installs or synchronizes Python dependencies with uv.
  • Whether it installs frontend packages with pnpm.
  • Which working directories it enters.
  • Which commands start the backend and frontend.
  • Whether it modifies files, creates virtual environments, or writes generated assets.
  • How it handles process shutdown when one service fails or when you press Ctrl+C.

This review is not a replacement for running the provided script. It prevents an article from falsely promising behavior that might change between repository revisions. If the script and README disagree, pause and review the current commit history or project instructions before proceeding.

Run tick-stock-panel in native development mode

Comparison of native development mode and Docker Compose installation paths.
Native development separates the frontend and backend, while Docker Compose provides the integrated endpoint used later for remote access.

Use native development mode when modifying the React or FastAPI source. Keep both services local during this workflow unless you have independently verified the current repository's remote-development settings.

1

Verify the native toolchain

Run all version checks from the same terminal that will launch the project. Confirm Python 3.11 or newer and Node.js 20 or newer.

git --version
python --version
node --version
uv --version
pnpm --version
2

Create and review the environment file

Copy .env.example to .env, preserve its variable names, and add only the credentials and integrations you intend to use. Confirm with git status that the environment file is not staged.

3

Review the platform script

Read dev.sh on Linux or macOS, or dev.ps1 on Windows. Check its package installation, startup, working-directory, and shutdown behavior against the current repository instructions.

4

Launch the repository-provided script

On Linux or macOS, run the shell script from the repository root:

bash dev.sh

On Windows, run the PowerShell script from the repository root:

.\dev.ps1
5

Wait for both services

Watch the startup output. The expected development addresses are http://localhost:3011 for the frontend and http://localhost:3018 for the backend. Do not continue while either process is repeatedly failing or restarting.

How the split services communicate

The frontend must send API and SSE requests to the backend, either through a development-server proxy or through an explicitly configured backend origin. Which method the current project uses must be established from the checked-out frontend configuration and API client. Likewise, remote hostname support must be established from the active Vite configuration rather than inferred from the fact that the local page opens.

Check the browser developer tools while using http://localhost:3011. Inspect the Network panel to identify the actual API request paths and origins. For an SSE-backed operation, confirm that the corresponding request remains open and receives events rather than immediately failing. Check the Console panel for CORS, blocked-host, mixed-content, and connection errors.

This local observation helps diagnose development problems, but it does not authorize public exposure. A proxy that works for localhost can behave differently when the browser loads a public HTTPS hostname. A hardcoded local backend URL can also cause a remote browser to request its own loopback interface instead of the development host.

Stop development mode

Return to the foreground terminal and press Ctrl+C. Wait for both child processes to exit. If the script starts processes in separate windows or background jobs, follow its current shutdown behavior and verify that ports 3011 and 3018 are released before starting Compose.

Build and run the integrated Docker Compose application

Docker Compose is the remote-access path used in this guide because it provides a documented single browser entry point on port 3018. Stop native development mode first, since its backend uses the same port.

1

Inspect the resolved Compose configuration

From the repository root, render the configuration Docker will use. This catches syntax and interpolation errors and lets you inspect ports and mounts before startup.

docker compose config
2

Verify ports and persistence

In the rendered output, confirm that the service publishes the expected host port 3018. Record every bind mount or named volume before continuing. The current repository contents were not supplied here, so this guide does not invent a mount path or claim that all state survives container replacement.

3

Review Dockerfile and environment handling

Confirm what the current Dockerfile copies into the image and how docker-compose.yml supplies environment values. Make sure .env and local data are not unintentionally copied into an image that will be shared.

4

Build and start the application

Run the repository's documented Compose command:

docker compose up --build

Keep the terminal open during the first run and read the earliest meaningful error if the build or startup fails.

5

Open the integrated local endpoint

Open http://localhost:3018 on the Docker host. Confirm that the user interface loads and that the container is not repeatedly restarting before configuring Localtonet.

Routine Compose commands

Use these commands from the repository directory to inspect status and logs:

docker compose ps
docker compose logs

Stop the foreground process with Ctrl+C. To remove the Compose containers and project network without adding a volume-removal option, run:

docker compose down
Do not remove volumes until persistence is understood

Avoid docker compose down -v, broad Docker pruning, or manual deletion of mounted directories until you have identified and backed up the application's current storage. The README says application data is stored locally in formats including Parquet, but the supplied evidence does not identify the current Compose mount paths or guarantee which data survives each cleanup operation.

Verify the application before creating a tunnel

Terminal and local browser checks confirming that tick-stock-panel is running.
Confirm the local application and container state before adding a public network path.

Local verification separates application failures from tunnel failures. A Localtonet HTTP tunnel forwards requests to an IP address and port reachable by the Localtonet client. It cannot repair a failed build, start a stopped container, correct data-source credentials, or make a service listen on a different interface.

Verify native development mode

  • Open http://localhost:3011 and confirm that the React interface renders.
  • Check that http://localhost:3018 responds as expected for the backend.
  • Use browser developer tools to inspect API and SSE requests.
  • Review both frontend and backend terminal output when a page renders but data does not load.
  • Distinguish unavailable optional integrations from a general application startup failure.

A response from one port does not prove that the other service is healthy. It also does not prove that a remote browser can use the same routing arrangement. Keep this mode local under the scope of this guide.

Verify Docker Compose

Open http://localhost:3018 and exercise the application locally. Check navigation, normal data requests, and at least one operation that uses live progress or streaming if configured. Then confirm the service state:

docker compose ps
docker compose logs

Resolve connection refusals, repeated restarts, missing configuration, and fatal backend exceptions before proceeding.

Verify from the Localtonet client device

The Localtonet client can run on the tick-stock-panel host or on another device that can reach it. If both run on the same host, the Compose target is naturally 127.0.0.1:3018. If the Localtonet client runs elsewhere, 127.0.0.1 points to that other device, not to the tick-stock-panel host.

For a separate client device, determine the application's reachable private LAN address and test it from that device before creating a tunnel. For example, if the host is assigned 192.168.1.50, test http://192.168.1.50:3018. That address is only an example. Use the host's actual address and ensure the application is intentionally reachable on the local network.

Loopback addresses are device-specific

Use 127.0.0.1 only when the Localtonet client and tick-stock-panel run on the same device. A tunnel configured on another computer will interpret 127.0.0.1 as that computer's own loopback interface.

Connect the Compose endpoint through Localtonet

Remote HTTP traffic passing through Localtonet to the local tick-stock-panel service.
The public HTTPS endpoint forwards requests through Localtonet to the verified Compose service on port 3018.

With Localtonet, our client establishes an outbound connection to a Localtonet relay server. The resulting HTTP tunnel provides a public HTTPS address for the local service without requiring inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Creating a tunnel does not start it. The public address is available only while the selected client device is connected and the tunnel is running. The following workflow targets the integrated Compose endpoint, not the development frontend on port 3011.

1

Install and run the Localtonet client

Install our client application on the device that can reach the verified Compose endpoint. Use the current Localtonet installer for that operating system and keep the client running. Installation details can vary by operating system and client version, so use the current download or documentation interface rather than an unverified command copied from an older tutorial.

2

Authenticate or select the client device

Use the device-specific authentication token for the client that will run the tunnel. Confirm that the intended device is connected. Never publish the token, place it in the tick-stock-panel repository, or include it in screenshots.

3

Select an available relay server

Choose an available Localtonet relay server or region from the current dashboard. Available servers, regions, and plan access can vary, so do not hardcode a server code from an article.

4

Create the HTTP tunnel

Create an HTTP tunnel and enter the target reachable from the Localtonet client. When both applications run on the same host, use local IP 127.0.0.1 and port 3018. When they run on separate LAN devices, use the verified private IP address of the tick-stock-panel host and port 3018.

5

Start the tunnel

Recheck the target, then select Start. Tunnel creation alone does not make the endpoint active. Once the tunnel is running and the selected client is connected, use the assigned public HTTPS URL shown in the dashboard.

6

Test and stop access deliberately

Open the public URL from a separate browser session or network. Verify that the intended application loads and that sensitive configuration is not exposed. Stop the tunnel when temporary testing or maintenance is complete.

For the current dashboard workflow, see the Localtonet HTTP tunnel documentation. HTTP tunnels can use a generated subdomain, a selected subdomain where supported, or a custom domain. Confirm current DNS requirements before configuring a custom domain.

Target Service represented Guidance
127.0.0.1:3018 with Compose Integrated browser application on the same host as Localtonet Use for the supported remote-access workflow in this guide
private-host-ip:3018 with Compose Integrated application on another reachable LAN device Use only after the Localtonet client device can open it locally
127.0.0.1:3018 in native development FastAPI backend rather than the complete development interface Keep local unless remote backend access has been independently reviewed
127.0.0.1:3011 in native development Vite development frontend Not presented as a supported complete remote application in this guide

Back up and update the installation safely

An update procedure should protect configuration and locally stored research data before rebuilding images or replacing containers. Because the supplied evidence does not reveal the exact current Compose mounts, begin by identifying them rather than assuming a fixed directory.

Create a backup inventory

  1. Stop the Localtonet tunnel so the application is no longer publicly reachable.
  2. Record the current commit with git rev-parse HEAD.
  3. Run docker compose config and identify every bind mount and named volume.
  4. Record the location of the local .env file without displaying its secrets.
  5. Identify the current local Parquet, DuckDB, JSON cache, or other application-data locations from the resolved configuration and repository documentation.
git rev-parse HEAD
docker compose config
docker compose ps

Stop the application before copying active data

Stop the application cleanly before making a file-level backup. This avoids copying a database or generated dataset while it is being written:

docker compose down

Copy the identified host-mounted data directories and the private .env file to protected backup storage. If the current Compose file uses named volumes instead of host directories, use an approved Docker volume backup method appropriate for that host. This article does not provide a guessed volume name because it must match the current repository configuration.

Update without discarding the rollback point

Review local source changes first:

git status

Do not pull over uncommitted modifications without deciding how to preserve them. After backing up data and configuration, fetch the repository update using the Git workflow appropriate for your checkout. Review changes to these files before rebuilding:

  • .env.example
  • dev.sh and dev.ps1
  • Dockerfile
  • docker-compose.yml
  • Frontend Vite and API configuration
  • Backend startup, CORS, host, and storage configuration

Compare the new environment template with your private configuration without committing secrets. Then validate and rebuild:

docker compose config
docker compose up --build

Test http://localhost:3018 locally before restarting the Localtonet tunnel. If the update introduces an undocumented data migration or changes mount paths, stop and consult the repository's release or migration instructions. The available evidence does not establish a universal migration command.

Security considerations for public access

A service reachable only through localhost is not equivalent to a service available through a public URL. Once the HTTP tunnel is running, internet clients that can reach the assigned address may send requests to the configured application. TLS at the tunnel edge protects transport to that edge, but it does not create authentication, authorization, safe account permissions, or data isolation inside tick-stock-panel.

The supplied repository evidence does not establish a complete internet-facing authentication model for tick-stock-panel. It also does not establish that every API, data-source setting, monitoring function, AI integration, or research result is appropriate for public access. Treat exposure as a security decision, not as an automatic part of installation.

๐Ÿ” Protect credentials Keep data-source, AI-provider, repository, and Localtonet credentials out of source control, images, logs, browser-visible settings, screenshots, and support messages.
๐Ÿ‘ค Use least privilege Prefer credentials limited to the data and operations the application needs. Do not reuse administrative credentials when a narrower account is available.
โฑ๏ธ Limit exposure time Start the tunnel only when remote access is required. Stop it before upgrades, configuration changes, backup work, or unattended debugging.
๐Ÿงช Test with non-sensitive data Initial remote tests should avoid private watchlists, proprietary datasets, production credentials, and other information that should not be returned to an unintended user.
Do not rely on an obscure URL

A difficult-to-guess public address is not a substitute for application authentication, authorization, least privilege, IP restrictions, or another deliberate access-control layer. If suitable controls have not been verified for the running tick-stock-panel version, keep the tunnel stopped.

Inspect both visible pages and browser network responses. An API response can contain more information than the interface renders. Check for leaked credentials, local paths, internal hostnames, debug traces, personal watchlists, provider details, and generated research data.

For temporary access, stop the Localtonet tunnel first and then stop tick-stock-panel. For startup, reverse the order: start and verify the local application, then start the tunnel. This prevents a public endpoint from pointing to an application that is being rebuilt or reconfigured.

Troubleshooting development, Compose, and tunnel problems

A development prerequisite is missing

Run the checks in the same terminal used to start the project:

python --version
node --version
uv --version
pnpm --version

Confirm Python 3.11 or newer and Node.js 20 or newer. Restart the terminal after installing a command. If more than one runtime is installed, inspect which executable appears first in the shell path.

PowerShell will not run dev.ps1

Confirm that the terminal is in the repository root and that dev.ps1 exists. Script execution can be restricted by local or organizational PowerShell policy. Do not broadly disable security controls. Use the policy approved for the device or an authorized development environment. The repository evidence supplied here does not prescribe a specific execution-policy change.

The shell script exits immediately

Run it from the repository root through the shell:

bash dev.sh

Read the first meaningful error. Check for a missing prerequisite, unsupported runtime version, dependency-download failure, malformed environment value, or unavailable port. Do not delete lockfiles or generated environments until the cause is understood.

Port 3018 is already in use

Stop the previous native development process or Compose application. The native backend and default Compose workflow both use port 3018, so treat them as alternative startup modes. This guide does not invent an undocumented remapping procedure.

The frontend opens but application data does not load

Confirm that the backend is running on port 3018. Inspect the browser Console and Network panels, including the request URL, origin, status code, and response. Review the backend terminal at the same time. A rendered React page does not prove that the backend, external data sources, SSE streams, or optional AI integrations are working.

The browser reports CORS, blocked-host, or origin errors

Return to local-only development testing. Do not solve a public-access problem by adding broad wildcard origins or disabling host checks without understanding the impact. Inspect the current Vite server configuration, frontend API origin, FastAPI middleware, and SSE URL construction. This guide intentionally uses the integrated Compose endpoint rather than prescribing unverified permissive development settings.

Docker Compose cannot reach the engine

docker info
docker compose version

Start the Docker engine or desktop application. Resolve host-level permissions or service problems before rebuilding tick-stock-panel.

The Compose build fails

Check the earliest meaningful build error. Confirm that the checkout contains Dockerfile and docker-compose.yml, package registries are reachable, disk space is available, and Docker has sufficient resources. Repeatedly rebuilding without identifying whether the failure is related to networking, storage, dependencies, or configuration usually obscures the cause.

Local access works but the Localtonet URL does not

  1. Confirm that http://localhost:3018 still works on the application host.
  2. Confirm that the Localtonet client is connected.
  3. Confirm that the intended device token was selected without exposing it.
  4. Confirm that the HTTP tunnel targets the correct local IP and port 3018.
  5. Confirm that the tunnel was started, not merely created.
  6. Use the public URL currently shown in the dashboard.

If Localtonet runs on another device, test the application's private LAN address from that device. Do not target 127.0.0.1 across devices.

The public page loads but a streaming operation fails

Compare the public browser's request with the locally working request. Confirm that the operation uses the integrated Compose origin rather than a hardcoded localhost address. Review the application logs for disconnects or exceptions. Avoid switching to the development frontend as a workaround unless its remote-origin, proxy, host, and SSE behavior has been verified from the current source.

The tunnel stopped unexpectedly

Verify that the Localtonet client device remains online and connected. Check whether the host slept, restarted, changed networks, or stopped Docker. A tunnel is available only while the selected client is connected and the tunnel remains running. Recheck local access before restarting it.

Frequently asked questions

What is required for native tick-stock-panel development?

The documented native toolchain is Python 3.11 or newer, Node.js 20 or newer, uv, pnpm, Git, and the appropriate shell. Use dev.sh on a compatible shell-based system or dev.ps1 in PowerShell on Windows.

Which ports does tick-stock-panel use?

Native development uses port 3011 for the React frontend and port 3018 for the FastAPI backend. The Docker Compose workflow uses port 3018 as its integrated browser entry point.

Why does this guide not tunnel the Vite development server on port 3011?

The supplied evidence does not establish the current Vite host checks, proxy rules, hot-reload origin, frontend API origin, backend CORS policy, or SSE URL behavior. Without those details, exposing port 3011 cannot be presented as a verified complete remote-development topology.

Which endpoint should I connect through Localtonet?

Use the locally verified Docker Compose endpoint on port 3018. If Localtonet runs on the same host, target 127.0.0.1:3018. If it runs on another device, use the tick-stock-panel host's reachable private IP address and port 3018.

Does Localtonet require a public IP or router port forwarding?

No. Our client establishes an outbound connection to a Localtonet relay server. This workflow does not require inbound router port forwarding, firewall changes, VPN setup, or a public IP address. The client must remain connected and the tunnel must be running.

Does a Localtonet HTTP tunnel add application authentication?

Do not assume that it does. The tunnel provides a public HTTPS route to the configured local target. Application authentication and authorization remain separate responsibilities. If suitable access controls have not been verified, keep the tunnel stopped.

Where does Docker Compose persist tick-stock-panel data?

The project describes local storage that includes Parquet data, but the exact current mount paths were not included in the supplied evidence. Run docker compose config and inspect the checked-out docker-compose.yml to identify bind mounts and named volumes before backup, update, or cleanup.

Can Docker Compose and native development mode run together?

Not with the documented default ports, because the native backend and Compose both use port 3018. Treat them as alternative startup modes unless the current repository explicitly documents a supported remapping.

Does the repository evidence prove that commercial use is prohibited?

The supplied README text says the project is for learning and research and is not investment or market-quotation software. The actual LICENSE text was not supplied, so this article does not make a broader commercial-use claim. Review the current license and third-party data terms directly before relying on a particular use right.

Connect your verified Compose service with Localtonet

Build tick-stock-panel, confirm the integrated application locally on port 3018, review its access controls, and then create an HTTP tunnel for the verified endpoint. Our outbound tunnel workflow provides remote access without opening an inbound router port or requiring a public IP address.

Get Started Free โ†’

Corrections & updates

Substantive changes approved by the Localtonet editorial team are listed transparently below.

Remove the outer article wrapper and place the hero first, with the existing What's in this guide card immediately after it. Align the title and content by either documenting a verified native development-mode Localtonet workflow or reframing the article as a Docker Compose remote-access guide. Add evidence-backed installation guidance for every native prerequisite, explain the behavior of the supplied development scripts, distinguish required and optional environment configuration, and verify the current frontend-to-backend routing

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support