A student-built mobile app that uses crowdsourced data to guide users through the most accessible paths, entrances, bathrooms, and more at the University of Texas at Austin.
Students with mobility disabilities at UT face daily challenges with blocked paths, unsafe ramps, and inaccessible routes. Existing tools like Google Maps fall short, forcing students to leave 30+ minutes early for a 10-minute route.
Mobilize solves this problem by providing real-time, crowdsourced accessibility data to help students navigate campus through the most accessible routes possible.
- Frontend: React Native with Expo
- Styling: NativeWind (Tailwind CSS for React Native)
- Navigation: Expo Router
- Queries: TanStack Query
- Backend: Supabase
- Language: TypeScript
- Development: Node.js, Expo CLI
- Node.js (v18 or higher)
- pnpm:
npm install -g pnpm
- Expo CLI:
npm install -g @expo/cli
- iOS Simulator (for Mac users) or Android Studio (for Android development)
- Docker Desktop (for local Supabase development)
- ES7+ React/Redux/React-Native snippets
- Tailwind CSS IntelliSense
- TypeScript Importer
- Prettier - Code formatter
- ESLint
- Auto Rename Tag
- Bracket Pair Colorizer
- Expo Documentation
- Supabase Documentation
- Supabase Local Development Documentation
- Nativewind Documentation
-
Clone the repository
git clone https://github.com/Longhorn-Developers/Mobilize.git cd mobilize
-
Install dependencies
pnpm install
-
Set up environment variables Create a
.env.local
file in the root directory:EXPO_PUBLIC_SUPABASE_URL=your_supabase_project_url EXPO_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
Should usually be these by default if local supabase development:
EXPO_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321 EXPO_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0
-
Run on your preferred platform
Note: Expo Go is no longer supported for this project due to the use of native modules (expo-maps). You must use a development build to run the app on a physical device or simulator.
- iOS:
pnpm ios
or pressi
in the terminal after runningpnpm start
- Android:
pnpm android
or pressa
in the terminal after runningpnpm start
- iOS:
Note: Make sure to install Docker Desktop before doing the steps below.
-
Install Supabase CLI
pnpm install -g supabase
-
Initialize Supabase in your project
pnpm supabase init
-
Start local Supabase services
pnpm supabase start
You will see a message like this in the terminal:
Started supabase local development setup. API URL: http://localhost:54321 DB URL: postgresql://postgres:postgres@localhost:54322/postgres Studio URL: http://localhost:54323 Inbucket URL: http://localhost:54324 anon key: eyJh...... service_role key: eyJh......
The
API URL
andanon key
are the environment variables you need to configure in the next step. -
Update your
.env.local
for local developmentEXPO_PUBLIC_SUPABASE_URL=http://localhost:54321 EXPO_PUBLIC_SUPABASE_ANON_KEY=your_local_anon_key
-
Access local services
- Studio: http://localhost:54323
- API: http://localhost:54321
- Auth: http://localhost:54321/auth/v1
Make sure to revert your .env.local file if switching back to the hosted Supabase project.
mobilize/
├── app/ # App screens and routing (Expo Router)
│ ├── (tabs)/ # Layout for tab navigation
│ │ ├── _layout.tsx # Defines the tab navigator
│ │ └── index.tsx # Main map screen
│ ├── _layout.tsx # Root layout for the app
│ ├── +html.tsx # Custom HTML for web builds
│ └── +not-found.tsx # Fallback for unmatched routes
├── assets/ # Static assets (images, fonts, etc.)
├── components/ # Reusable UI components
├── docs/ # Project documentation and guides
├── hooks/ # Custom React hooks
├── supabase/ # Supabase configuration, migrations, and functions
├── types/ # TypeScript type definitions
├── utils/ # Utility functions (e.g., Supabase client)
├── .env.local # Local environment variables (untracked)
├── app.json # Expo configuration file
├── babel.config.js # Babel compiler configuration
├── package.json # Project dependencies and scripts
├── tailwind.config.js # Tailwind CSS configuration
└── tsconfig.json # TypeScript configuration
We welcome contributions from developers, designers, and anyone passionate about accessibility! Here's how you can help:
-
Fork the repository and create your feature branch
git checkout -b feature/amazing-feature
-
Follow the coding standards
- Use TypeScript for all new code
- Follow the existing code style and conventions
- Use meaningful component and function names
- Add proper comments for complex logic
-
Run linting and formatting
pnpm lint # Check for issues pnpm format # Auto-fix formatting issues
-
Test your changes
- Test on both iOS and Android if possible
- Ensure accessibility features work correctly
- Test with different screen sizes
-
Commit your changes
git commit -m 'Add some amazing feature'
-
Push to your branch and create a Pull Request
- Use functional components with hooks
- Implement TypeScript interfaces for all props and data structures
- Follow NativeWind/Tailwind conventions for styling
- Keep components small and focused on single responsibilities
- Use descriptive variable names and add comments for complex logic
If you find a bug or have a feature request, please create an issue on GitHub with:
- Clear description of the problem or feature
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Screenshots or screen recordings if applicable
Join us in making UT campus more accessible for everyone! 🤝
For questions or to get involved, reach out to the Longhorn Developers team or create an issue on this repository.