# railwayka.ru Landing Page Modern business card website for railwayka.ru infrastructure, built with **Rust + WebAssembly** and deployed via [dcape](https://github.com/dopos/dcape) GitOps platform. ## Features - 🦀 **Rust + WebAssembly** - High-performance, compiled to WASM - Modern dark theme with clean design - Service cards showcasing current and planned services - Technology stack descriptions - Fully responsive layout - Minimal bundle size (~19KB WASM) ## Technology Stack - **Rust**: Core application logic - **WebAssembly**: Fast, portable binary format - **wasm-bindgen**: Rust-WASM bindings - **web-sys**: Web API bindings for Rust - **Nginx**: Alpine-based web server - **Docker**: Containerized deployment - **Traefik**: Automatic HTTPS via Let's Encrypt - **Dcape**: GitOps-based deployment ## Deployment This application uses GitOps workflow: 1. Push code to Git repository 2. Woodpecker CI automatically triggers 3. Application builds and deploys 4. Service goes live at https://railwayka.ru ### Manual Deployment ```bash # Clone repository git clone https://git.dc.railwayka.ru/howl/railwayka-landing.git cd railwayka-landing # Configure environment make config # Edit .env.sample and rename to .env mv .env.sample .env # Build and deploy make docker-build make up ``` ## Building from Source ### Prerequisites - Rust (latest stable) - install from [rustup.rs](https://rustup.rs/) - wasm-bindgen-cli - `cargo install wasm-bindgen-cli` - wasm32 target - `rustup target add wasm32-unknown-unknown` ### Build Steps ```bash # 1. Build Rust to WASM cargo build --release --target wasm32-unknown-unknown # 2. Generate JS bindings wasm-bindgen --out-dir dist --target web \ target/wasm32-unknown-unknown/release/railwayka_landing.wasm # 3. Copy static assets cp index.html style.css dist/ # 4. Serve locally cd dist python3 -m http.server 8000 # Visit http://localhost:8000 ``` ### Quick Build Script For convenience, you can use this one-liner: ```bash cargo build --release --target wasm32-unknown-unknown && \ wasm-bindgen --out-dir dist --target web target/wasm32-unknown-unknown/release/railwayka_landing.wasm && \ cp index.html style.css dist/ ``` ## Project Structure ``` . ├── Cargo.toml # Rust project manifest ├── .cargo/ │ └── config.toml # Rust build configuration ├── src/ │ └── lib.rs # Main Rust/WASM code ├── index.html # HTML shell ├── style.css # Styling ├── dist/ # Built artifacts (committed to git) │ ├── index.html │ ├── style.css │ ├── railwayka_landing.js │ ├── railwayka_landing_bg.wasm │ └── *.d.ts ├── html-old/ # Archived old HTML version ├── Makefile # Dcape app Makefile ├── docker-compose.yml # Service definition ├── Dockerfile # Nginx deployment └── .woodpecker.yml # CI/CD pipeline ``` ## Why Rust + WASM? - **Performance**: Near-native execution speed - **Size**: Optimized bundle (~19KB WASM + 9KB JS) - **Type Safety**: Rust's type system prevents common bugs - **Modern**: Cutting-edge web technology - **Learning**: Great opportunity to explore WASM ecosystem ## License MIT