Skip to content
23520904Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Aurews

Aurews is a cross-platform news reading and publishing application built as a four-member university team project for IE307 – Cross-Platform Mobile Application Development at the University of Information Technology, VNU-HCM.

The application combines a React Native mobile experience with a Node.js backend and AI-assisted features for reading, listening to, exploring, and creating news content.

Project status: Academic prototype. Aurews demonstrates the main product flows and integrations, but it is not presented as a production-scale news platform.


Overview

Aurews was designed around three main experiences:

  1. Readers can discover articles, personalize their feed, read in a focused mode, interact with authors, save content, and ask questions about an article.
  2. Authors can create and manage articles using a rich-text editor, voice input, AI-assisted rewriting, image upload, and draft management.
  3. Administrators have basic workflows for user management, author applications, reports, and content oversight.

The frontend and backend are separated through a client-server architecture and communicate using RESTful APIs.


Key Features

Reader Experience

  • onboarding and topic preference selection;
  • user registration, login, password recovery, and profile management;
  • personalized home feed and category-based exploration;
  • article search and user search;
  • article detail pages with HTML content rendering;
  • comments, likes, bookmarks, follows, and reading history;
  • notifications related to user interactions;
  • immersive reader mode with configurable reading preferences;
  • audio article playback with play, pause, progress, and mini-player controls;
  • AI-assisted article Q&A based on the selected article;
  • related-article suggestions.

Author Experience

  • author application workflow;
  • author dashboard and article management;
  • create, edit, publish, schedule, delete, and restore articles;
  • rich-text article editor;
  • image upload through Cloudinary;
  • speech-to-text input for article drafting;
  • Gemini-assisted text refinement;
  • draft and autosave-oriented editing workflow;
  • article status and publishing controls.

Administration

  • basic administrator dashboard;
  • user management;
  • author application review;
  • report handling;
  • content and account oversight.

The admin functionality is intentionally described as basic because advanced moderation, analytics, and granular authorization were outside the full scope of the academic project.


AI and Speech Features

Aurews integrates Google services to improve both reading and writing workflows.

Article Q&A

The application sends article context to Gemini so that readers can ask questions about the article they are currently viewing.

This feature is intended to help users:

  • clarify important points;
  • explore the article more deeply;
  • generate context-related questions;
  • discover related content.

Text-to-Speech

Google Cloud Text-to-Speech is used to generate audio from article content.

The mobile client supports:

  • audio playback;
  • pause and resume;
  • playback progress;
  • background-oriented listening;
  • compact mini-player controls.

Speech-to-Text

Google Cloud Speech-to-Text supports voice input in the article editor, allowing an author to convert recorded speech into editable text.

AI Writing Support

Gemini is also used as an editorial assistant to:

  • correct spelling and grammar;
  • improve clarity;
  • produce a more formal journalistic tone;
  • preserve the original facts, names, and numerical information.

AI output should still be reviewed by the author before publication.


Architecture

flowchart LR
    User[Reader / Author / Admin] --> Mobile[React Native + Expo]
    Mobile --> API[Node.js + Express REST API]

    API --> Mongo[(MongoDB)]
    API --> Redis[(Redis)]
    API --> Cloudinary[Cloudinary]
    API --> Gemini[Gemini API]
    API --> STT[Google Speech-to-Text]
    API --> TTS[Google Text-to-Speech]
    API --> SMTP[SMTP Email Service]
Loading

Frontend Responsibilities

The React Native client is responsible for:

  • navigation and screen rendering;
  • user interaction;
  • server-state fetching and synchronization;
  • local and global client state;
  • reader, author, and administrator interfaces;
  • loading, empty, and error states;
  • audio playback and editor interactions.

Backend Responsibilities

The Express backend is responsible for:

  • authentication and authorization;
  • user, article, comment, report, and application APIs;
  • MongoDB persistence;
  • refresh-token storage with Redis;
  • Cloudinary uploads;
  • AI and speech-service integrations;
  • input handling and centralized error responses;
  • email-based flows such as password recovery.

Technology Stack

Mobile Frontend

  • React Native
  • Expo
  • TypeScript
  • Expo Router
  • TanStack Query
  • Zustand
  • React Hook Form
  • Zod
  • FlashList
  • React Native Render HTML
  • React Native Pell Rich Editor
  • Expo AV
  • Expo Speech
  • Expo Image
  • AsyncStorage
  • SecureStore

Backend

  • Node.js
  • Express 5
  • JavaScript ES Modules
  • MongoDB
  • Mongoose
  • Redis / ioredis
  • JSON Web Token
  • bcryptjs
  • Cloudinary
  • Multer
  • Nodemailer
  • Morgan
  • CORS
  • Compression

AI and Cloud Services

  • Google Gemini
  • Google Cloud Speech-to-Text
  • Google Cloud Text-to-Speech
  • Cloudinary

Testing

  • Jest
  • Supertest
  • MongoDB Memory Server
  • Postman

Client State and Server State

Aurews separates different categories of frontend state.

TanStack Query

TanStack Query is used for server state such as:

  • article lists;
  • article details;
  • comments;
  • user data;
  • mutations and cache invalidation;
  • loading and error handling.

Zustand

Zustand is used for shared client state such as:

  • authentication-related client data;
  • preferences;
  • interface settings;
  • audio-player state;
  • cross-screen application state.

This separation helps avoid treating remote server data and local UI state as the same concern.


Authentication

The backend uses access and refresh tokens.

  • Access tokens are short-lived.
  • Refresh tokens are stored and validated through Redis.
  • Passwords are hashed with bcryptjs.
  • Protected routes verify the current user.
  • Role-based flows distinguish normal users, authors, and administrators.
  • The frontend API client attempts token refresh when a protected request receives 401 Unauthorized.

This authentication implementation was created for the academic project and should receive additional security review before production use.


API Areas

The API is mounted under /api.

/api/auth           Authentication and token workflows
/api/users          Profiles, preferences, follows, bookmarks, and user data
/api/posts          Article CRUD, search, publishing, AI, speech, and reading flows
/api/comments       Article comments
/api/applications   Author application workflows
/api/reports        User and content reports

A health-check endpoint is also available:

GET /ping

Repository Structure

Aurews/
├── backend/
│   ├── src/
│   │   ├── controllers/     # Request handlers and application workflows
│   │   ├── lib/             # Database, Redis, token, cookie, and cloud config
│   │   ├── middlewares/     # Authentication, validation, and request handling
│   │   ├── models/          # Mongoose schemas
│   │   ├── routes/          # REST API routes
│   │   ├── services/        # Reusable business logic
│   │   ├── utils/           # Email, uploads, errors, and helpers
│   │   ├── app.js           # Express application configuration
│   │   └── server.js        # Server startup
│   ├── tests/
│   └── package.json
│
└── frontend/
    ├── app/                 # Expo Router screens and layouts
    │   ├── (auth)/
    │   ├── (tabs)/
    │   ├── admin/
    │   ├── author/
    │   ├── onboarding/
    │   └── user/
    ├── src/
    │   ├── api/             # API client
    │   ├── components/      # Shared UI components
    │   ├── hooks/           # Data and feature hooks
    │   ├── stores/          # Zustand stores
    │   ├── types/
    │   └── utils/
    └── package.json

Getting Started

Requirements

  • Node.js
  • npm
  • MongoDB
  • Redis or an Upstash Redis instance
  • an Expo-compatible development environment
  • Google Cloud credentials for Speech-to-Text and Text-to-Speech
  • a Gemini API key
  • Cloudinary credentials
  • SMTP credentials for email features

Backend Setup

cd backend
npm install

Create backend/.env:

NODE_ENV=development
PORT=6666

MONGO_URI=mongodb://127.0.0.1:27017/aurews

JWT_ACCESS_SECRET=replace_with_a_secure_access_secret
JWT_REFRESH_SECRET=replace_with_a_secure_refresh_secret

UPSTASH_REDIS_URL=redis://127.0.0.1:6379

CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret

GEMINI_API_KEY=your_gemini_api_key

CLIENT_URL=http://localhost:8081

SMTP_HOST=your_smtp_host
SMTP_PORT=587
SMTP_USER=your_smtp_username
SMTP_PASS=your_smtp_password
APP_NAME=Aurews

For Google Cloud Speech-to-Text and Text-to-Speech, configure Application Default Credentials or set:

GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json

Never commit real API keys, service-account files, database credentials, or SMTP passwords.

Start the backend:

npm run dev

The server uses port 6666 by default unless another PORT is supplied.

Test the server:

http://localhost:6666/ping

Frontend Setup

cd frontend
npm install

Create frontend/.env:

EXPO_PUBLIC_BASE_API_URL=http://YOUR_BACKEND_HOST:6666/api

Examples:

For an emulator or web environment where localhost reaches the backend:

EXPO_PUBLIC_BASE_API_URL=http://localhost:6666/api

For Expo Go on a physical phone, use the computer's LAN IP:

EXPO_PUBLIC_BASE_API_URL=http://192.168.1.10:6666/api

Start Expo:

npm start

Other available commands:

npm run android
npm run ios
npm run web
npm run lint
npm test

The phone and development computer normally need to be reachable on the same network when using a LAN backend address.


Backend Tests

Run the backend tests with:

cd backend
npm test

The backend includes Jest and Supertest support, with MongoDB Memory Server available for isolated test data.

Postman was also used during the project to validate the main API workflows.


Team Contributions

Aurews was developed collaboratively by Group 14.

The summary below follows the responsibility allocation documented in the submitted project report. It describes each member's main areas of work and does not imply that every file or feature was developed in complete isolation.

Nguyễn Xuân Đình Lực

  • reorganized the backend around routes, controllers, services, and models;
  • separated database, port, and secret configuration;
  • created shared success and error response helpers;
  • worked on user schemas and user/admin roles;
  • improved image upload handling;
  • implemented token-verification middleware;
  • worked on article search and sorting;
  • added input validation and rate limiting;
  • tested backend APIs with Postman.

Nguyễn Phước Sang

  • initialized the mobile application and frontend structure;
  • implemented the core reader flow from home to article details, comments, and bookmarks;
  • built article lists, category navigation, reading interfaces, comments, and saved-article screens;
  • replaced mock data with backend API integration;
  • tested the main user flows;
  • worked on home-feed personalization;
  • implemented article AI chat, text-to-speech, speech-to-text, and AI-assisted writing workflows;
  • improved article-management interactions and related frontend/backend integration.

Bùi Vũ Bảo Chấn

  • designed category and article schemas;
  • implemented category CRUD operations;
  • separated article routes, controllers, and services;
  • worked on paginated article retrieval;
  • contributed to registration and login APIs;
  • implemented article comments and bookmark operations;
  • resolved integration conflicts and supported branch merging.

Nguyễn Hữu Việt Cường

  • initialized the administrator interface;
  • designed the admin login, create, edit, and publish flows;
  • implemented article forms for title, content, and thumbnail;
  • added loading, empty, and error states;
  • connected administrator content-management screens to backend APIs;
  • tested the main administrator flows.

Academic Scope and Limitations

Aurews demonstrates a broad set of modern mobile and backend concepts, but several areas remain intentionally limited:

  • recommendation logic is not a production-grade machine-learning recommender;
  • load and scalability testing were not performed at production traffic levels;
  • administrator analytics and advanced moderation remain limited;
  • real-time notifications were outside the complete implementation scope;
  • AI and speech features depend on third-party availability, quotas, and pricing;
  • production deployment, observability, distributed caching, and high-availability infrastructure require further work.

These limitations are documented to distinguish implemented academic work from future production improvements.


Possible Improvements

  • add a stronger behavior-based recommendation system;
  • introduce real-time notifications;
  • add broader automated test coverage;
  • containerize frontend support services and the backend;
  • add CI workflows;
  • improve role and permission granularity;
  • add cache and MongoDB query optimization;
  • add production monitoring and structured logging;
  • improve AI failure handling and fallback behavior;
  • add accessibility testing;
  • benchmark large article feeds and concurrent users;
  • add a documented seed-data workflow.

Course Information

  • Course: IE307 – Cross-Platform Mobile Application Development
  • Project: Aurews News Application
  • Institution: University of Information Technology, VNU-HCM
  • Team: Group 14
  • Academic period: 2025–2026

Contributors

  • Nguyễn Xuân Đình Lực
  • Nguyễn Phước Sang
  • Bùi Vũ Bảo Chấn
  • Nguyễn Hữu Việt Cường

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages