railwayka-landing/README.md

123 lines
3.3 KiB
Markdown

# 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