CTS285 Fall 20xx Team Project

PokeSense

A Comprehensive Pokémon Management System

API Integration Data Storage Collection Management User Interface

Presented by Team PokeSense

Project Overview

PokeSense is a comprehensive Pokémon management application designed for Professor Oak's Research Lab. The system allows researchers to search, collect, and analyze Pokémon data through an intuitive interface with direct integration to the PokeAPI.

Our application demonstrates a clean separation between GUI, business logic, and data layers while providing a rich user experience for Pokémon enthusiasts and researchers alike.

PokeSense Logo

Team PokeSense logo

The Problem

Professor Oak's Pokémon Research Lab faces significant challenges in their daily operations:

  • Researchers waste hours manually looking up Pokémon information
  • Paper-based system is inefficient and prone to loss
  • No way to analyze Pokémon data effectively
  • Difficult to share knowledge between researchers
  • Field research data often gets lost or damaged
"Our analog record-keeping can't keep pace with discovery. Without a modern solution, valuable research insights are being lost, and new trainers lack the guidance they need."
— Professor Oak
Professor Oak explaining the problem to the team

Professor Oak explaining the challenges to team members

Our Solution: PokeSense

A comprehensive Pokémon management system that:

Key Features

  • Instant access to the complete Pokémon database
  • Personal collections with notes and favorites
  • Intuitive visualization of Pokémon data
  • Persistent storage with easy retrieval
  • User-friendly interface for researchers

Technical Highlights

  • PokeAPI integration with caching
  • Clean separation of concerns (MVC pattern)
  • Multiple interfaces (GUI, console)
  • Comprehensive test coverage
  • Documentation and examples

Implementation Success

Since implementing PokeSense, Professor Oak's lab has reported:

73%

Reduction in time spent looking up Pokémon information

100%

Elimination of lost research notes

45%

Increase in collaborative research projects

92%

Adoption rate among researchers

Meet the Team

The PokeSense Team
Project Lead

Ash

Responsibility: Architecture, integration, and project oversight

Strengths: Leadership, determination, strategic planning

Signature Tool: Git & Project Management

Technical Architect

Misty

Responsibility: Business logic and PokeAPI integration

Strengths: Problem-solving, API design, data modeling

Signature Tool: Python Core & API Integration

Frontend Developer

Brock

Responsibility: UI design and Streamlit implementation

Strengths: UX/UI design, frontend development, user empathy

Signature Tool: Streamlit & Data Visualization

Quality Assurance

Serena

Responsibility: Data layer and testing

Strengths: Quality control, persistence, attention to detail

Signature Tool: Testing & Storage Implementation

"Capturing data to understand the world of Pokémon—one entry at a time!"
— Team PokeSense Motto

Architecture

Three-Tier Architecture

PokeSense follows a clean separation of concerns with three distinct layers:

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│     GUI     │ ↔  │    Logic    │ ↔  │    Data     │
│  (Streamlit)│    │   (Core)    │    │  (Storage)  │
└─────────────┘    └─────────────┘    └─────────────┘
     Brock            Misty             Serena
   (Frontend)      (Business Logic)    (Data Layer)
                                          
                      Ash
                 (Project Lead &
                  Integration)

Component Breakdown

  • Presentation Layer (Brock): Streamlit web interface and console tools
  • Business Logic Layer (Misty): PokeAPI integration, Pokemon collections, and operations
  • Data Layer (Serena): Storage interfaces, JSON implementation, and data validation
  • Integration (Ash): Cross-component communication and project structure

Directory Structure

tool-pokeapi/
├── core/                 # Core functionality
│   ├── models.py         # Data models
│   ├── storage.py        # Storage implementation
│   ├── operations.py     # Collection operations
│   └── pokeapi_service.py # API integration
├── interfaces/
│   └── streamlit_app/    # Streamlit interface
├── examples/             # Example scripts
├── tests/                # Unit tests
└── docs/                 # Documentation

Development Process

Team with dragon-type mascot

Our team bonding with a dragon-type mascot during development sprints

Round-Robin Development Approach

We implemented a round-robin approach to ensure all team members gained experience across the full stack:

Week Ash Misty Brock Serena
1 Integration API UI Data
2 Data Integration API UI
3 UI Data Integration API
4 API UI Data Integration

Development Sprints

Sprint 1: Foundation (1 week)

Goal: Establish core architecture and basic API integration

Key Deliverables:

  • Project structure and documentation
  • Pokemon data model definition
  • Basic PokeAPI integration
  • Initial test framework

Primary Contributor: Ash & Misty

Sprint 2: Core Functionality (1 week)

Goal: Implement storage and collection operations

Key Deliverables:

  • Storage interface and JSON implementation
  • Pokemon collection operations (CRUD)
  • Command-line MVP demo
  • Unit tests for core components

Primary Contributor: Serena & Ash

Sprint 3: User Interface (1 week)

Goal: Create Streamlit interface and collection management

Key Deliverables:

  • Streamlit web application
  • Pokemon search and display
  • Collection management features
  • Type badges and stat visualization

Primary Contributor: Brock & Misty

Sprint 4: Refinement (1 week)

Goal: Polish UI, complete documentation, and add final features

Key Deliverables:

  • Featured Pokemon display (Pikachu)
  • Comprehensive test suite
  • Final documentation and examples
  • Presentation materials

Primary Contributor: All team members

Key Features Showcase

PokeAPI Integration

Seamless integration with the PokeAPI to retrieve comprehensive Pokemon data:

# Search for Pokémon
results = PokeApiService.search_pokemon("pikachu")

# Get Pokémon details
details = PokeApiService.get_pokemon_details("pikachu")

# Create Pokémon object
pokemon = PokeApiService.create_pokemon_from_api_data(details)

Implemented by: Misty

Data Persistence

Flexible storage system with JSON implementation:

# Initialize storage
storage = JsonStorage("pokemon_collection.json")

# Create collection
collection = PokemonCollection(storage)

# Add, retrieve, update, and delete operations
collection.add_pokemon(pokemon)
collection.get_pokemon(pokemon_id)
collection.update_pokemon(pokemon)
collection.delete_pokemon(pokemon_id)

Implemented by: Serena

User Interface

Intuitive Streamlit interface with rich visualization:

  • Responsive grid layout for Pokemon cards
  • Type-based color coding for easy identification
  • Progress bars for visualizing Pokemon stats
  • Expandable sections for detailed information

Implemented by: Brock

Pokemon Model

Comprehensive data model for Pokemon with validation:

@dataclass
class Pokemon:
    name: str
    pokemon_id: int
    types: List[str]
    sprites: Dict[str, str]
    height: int
    weight: int
    stats: List[Dict[str, any]]
    abilities: List[str]
    moves: List[str]
    favorite: bool = False
    notes: str = ""
    id: str = field(default_factory=lambda: str(uuid4()))
    date_added: datetime = field(default_factory=datetime.now)

Implemented by: Ash

Testing and Quality Assurance

Comprehensive Test Suite

We implemented extensive testing to ensure code quality and reliability:

Unit Tests by Component

  • test_models.py: Pokemon data model validation
  • test_storage.py: Storage operations
  • test_operations.py: Collection management
  • test_pokeapi_service.py: API integration

Testing Approach

  • Mock-based testing for API calls
  • Temporary file handling for storage tests
  • Edge case coverage for validation
  • Coverage reporting with HTML output

Coverage Targets

Our test suite maintains high coverage across components:

Core Models 100%
Storage Layer 95%
Business Logic 92%
API Integration 85%

Quality Assurance Process

Led by Serena, our QA process includes:

  • Automated Tests: Run on every code change
  • Code Reviews: Every PR requires approval
  • Documentation: Required for all new features
  • Type Hinting: Used throughout the codebase
  • Error Handling: Graceful recovery from failures
"Our thorough testing approach ensures that PokeSense remains reliable even as we add new features."
— Serena, QA Lead

Demo and Future Work

Live Demo Highlights

Our live demo showcases:

  1. Starting the application with featured Pokemon (Pikachu)
  2. Searching for Pokemon by name
  3. Viewing detailed Pokemon information
  4. Adding Pokemon to a personal collection
  5. Managing favorites and custom notes

Run It Yourself

To run PokeSense on your own machine:

# Clone the repository
git clone https://github.com/CTS285_FA22/tool-pokeapi.git

# Install dependencies
pip install -r requirements.txt

# Run the Streamlit web interface
cd interfaces/streamlit_app
streamlit run pokeapi_app.py

# Or try the MVP console demo
cd examples
python pokemvp.py

Future Enhancements

Planned features for future releases:

  • Team building with type coverage analysis
  • Evolutionary chain visualization
  • Advanced filtering by stats
  • Mobile responsive design
  • Dark mode support
  • Internationalization
"Understanding Pokémon is the work of a lifetime. The better our tools, the deeper our understanding can grow. What began as simple classification has evolved into a rich exploration of the incredible diversity of Pokémon. PokeSense isn't just software—it's the future of Pokémon research."
— Professor Oak

Thank You!

Any questions?

Team PokeSense

Ash - Project Lead

Misty - Technical Architect

Brock - Frontend Developer

Serena - Quality Assurance

Charizard - Team Mascot

GitHub Repository

github.com/CTS285_FA22/tool-pokeapi

Gotta Catch 'Em All!
Slide 1 of 10