NomadPage is a platform designed to support digital nomads who plan to live and work from Sri Lanka. Our goal is to create a centralized hub for all the resources nomads need.
Frontend: Next.js 15, Tailwind CSS, Shadcn/ui
Backend: Ballerina, PostgreSQL, AWS S3
Additional Services: Flask, BeautifulSoup4 (for news scraping)
Before you start, make sure you have installed:
- Node.js v20+ and npm
- Ballerina
- Python
- PostgreSQL (or Supabase for easier setup)
- Asgardeo Account (for authentication)
- AWS Account (for S3 file storage)
git clone https://github.com/<username>/iwb25-075-octopipers.git
cd iwb25-075-octopipers- Create a new PostgreSQL database (or Supabase project).
- Run the schema file to create tables:
service/resources/schema.sql- AWS S3 → Create a bucket, IAM user, and note down credentials.
- Perplexity API → Get your API key from perplexity.ai.
- OpenWeather API → Get your API key from openweathermap.org.
In the service/ root directory:
[service.utils]
dbHost = "database-host"
dbUser = "database-username"
dbPassword = "database-password"
dbPort = 5432
dbName = "database-name"
accessKeyId = "aws-access-key"
secretAccessKey = "aws-secret-key"
region = "aws-region"
bucketName = "s3-bucket-name"
[service.city_guide]
perplexityApiKey = "perplexity-api-key"
[service.tools]
openWeatherApi = "openweathermap-api-key"cd service
bal runBackend available at: http://localhost:8080
cd webapp
npm install- Create a new app in Asgardeo Console.
- Collect:
- Client ID
- Client Secret
- Organization Name
- Application Name
- Create a
.env.localfile inwebapp/:
AUTH_SECRET=your-secret-key
ASGARDEO_CLIENT_ID=your-client-id
ASGARDEO_CLIENT_SECRET=your-client-secret
AUTH_ASGARDEO_ISSUER="https://api.asgardeo.io/t/<org-name>/oauth2/token"
NEXT_PUBLIC_AUTH_ASGARDEO_LOGOUT_URL="https://api.asgardeo.io/t/<org-name>/oidc/logout"
NEXT_PUBLIC_AUTH_ASGARDEO_POST_LOGOUT_REDIRECT_URL="http://localhost:3000/auth/sign-out"- Configure Backend Authentication
Update the JWT validator configuration in
service.bal:
auth: [
{
jwtValidatorConfig: {
issuer: "https://api.asgardeo.io/t/<org-name>/oauth2/token",
audience: ["your-client-id"],
signatureConfig: {
jwksConfig: {
url: "https://api.asgardeo.io/t/<org-name>/oauth2/jwks"
}
}
}
}
]npm run devFrontend available at: http://localhost:3000
This service scrapes latest news from newswire.lk and provides live updates.
cd newswired
python -m venv venv
# On Windows
venv\Scripts\activate
# On macOS/Linux
source venv/bin/activate
pip install -r requirements.txt
python app.pyNews scraper runs at: http://localhost:5000/latest-news
- Backend (Ballerina):
http://localhost:8080 - Frontend (Next.js):
http://localhost:3000 - News Scraper (Flask):
http://localhost:5000/latest-news - WebSocket Services:
ws://localhost:9091(incidents),ws://localhost:9090(chat)
- City Rank - Rankings and insights for Sri Lankan cities
- Incident Report Map - Report and view local incidents
- Meetups - Connect with local groups and communities
- Find Remote Jobs - Search and apply for online opportunities
- Co-working Places - Discover work-friendly spaces
- Utility Tools - Currency conversion, time zones, weather, and latest news
- HTTP - RESTful API endpoints with resource functions
- WebSocket - Real-time bidirectional communication for chat , meetups and incidents
- PostgreSQL Connector - Database connectivity with connection pooling
- AWS S3 Connector
- JWT - Service-level JWT validation with WSO2 Asgardeo OIDC