From cb81bec0424d0d3ab82ac30e075384aad5f236ce Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Tue, 22 Jul 2025 20:39:09 -0500 Subject: [PATCH] add Of The Day display --- config/config.json | 20 +- of_the_day/OF_THE_DAY_GUIDE.md | 329 ++++ of_the_day/slovenian_word_of_the_day.json | 1827 +++++++++++++++++++++ of_the_day/word_of_the_day.json | 1827 +++++++++++++++++++++ src/display_controller.py | 11 + src/of_the_day_manager.py | 281 ++++ test/test_of_the_day.py | 138 ++ 7 files changed, 4432 insertions(+), 1 deletion(-) create mode 100644 of_the_day/OF_THE_DAY_GUIDE.md create mode 100644 of_the_day/slovenian_word_of_the_day.json create mode 100644 of_the_day/word_of_the_day.json create mode 100644 src/of_the_day_manager.py create mode 100644 test/test_of_the_day.py diff --git a/config/config.json b/config/config.json index 8541c8ab..d3826004 100644 --- a/config/config.json +++ b/config/config.json @@ -69,7 +69,8 @@ "ncaam_basketball_live": 30, "ncaam_basketball_recent": 30, "ncaam_basketball_upcoming": 30, - "music": 30 + "music": 30, + "of_the_day": 20 }, "use_short_date_format": true }, @@ -328,5 +329,22 @@ "preferred_source": "ytm", "YTM_COMPANION_URL": "http://192.168.86.12:9863", "POLLING_INTERVAL_SECONDS": 1 + }, + "of_the_day": { + "enabled": true, + "update_interval": 3600, + "category_order": ["word_of_the_day", "slovenian_word"], + "categories": { + "word_of_the_day": { + "enabled": true, + "data_file": "of_the_day/word_of_the_day.json", + "display_name": "Word of the Day" + }, + "slovenian_word": { + "enabled": true, + "data_file": "of_the_day/slovenian_word_of_the_day.json", + "display_name": "Slovenian Word of the Day" + } + } } } \ No newline at end of file diff --git a/of_the_day/OF_THE_DAY_GUIDE.md b/of_the_day/OF_THE_DAY_GUIDE.md new file mode 100644 index 00000000..edab74e4 --- /dev/null +++ b/of_the_day/OF_THE_DAY_GUIDE.md @@ -0,0 +1,329 @@ +# "Of The Day" Display System Guide + +## Overview + +The "Of The Day" display system allows you to create multiple daily displays that show different types of content each day. This system is perfect for educational content, inspirational messages, language learning, and more. + +## Features + +- **Multiple Categories**: Enable multiple "of the day" displays simultaneously +- **Daily Rotation**: Each day shows a different item based on the day of the year +- **Customizable Content**: Create your own categories and content +- **Configurable Display**: Control display duration, update intervals, and more +- **AI-Ready**: Designed to work with LLM AI models for content generation + +## Configuration + +### Basic Setup + +Add the following configuration to your `config/config.json`: + +```json +{ + "of_the_day": { + "enabled": true, + "update_interval": 3600, + "category_order": ["word_of_the_day", "bible_verse", "spanish_word"], + "categories": { + "word_of_the_day": { + "enabled": true, + "data_file": "data/word_of_the_day.json", + "display_name": "Word of the Day" + }, + "bible_verse": { + "enabled": true, + "data_file": "data/bible_verse_of_the_day.json", + "display_name": "Bible Verse of the Day" + }, + "spanish_word": { + "enabled": true, + "data_file": "data/spanish_word_of_the_day.json", + "display_name": "Spanish Word of the Day" + } + } + } +} +``` + +### Configuration Options + +- **enabled**: Enable/disable the entire "of the day" system +- **update_interval**: How often to check for updates (in seconds) +- **category_order**: The order in which categories will be displayed +- **categories**: Individual category configurations + +### Category Configuration + +Each category has these options: + +- **enabled**: Enable/disable this specific category +- **data_file**: Path to the JSON data file (relative to project root) +- **display_name**: Human-readable name for the category + +### Display Duration + +Add the display duration to the `display_durations` section: + +```json +"display_durations": { + "of_the_day": 20 +} +``` + +## Data File Format + +Each category uses a JSON file with the following structure: + +```json +{ + "1": { + "title": "SERENDIPITY", + "subtitle": "A pleasant surprise", + "description": "The occurrence and development of events by chance in a happy or beneficial way" + }, + "2": { + "title": "EPHEMERAL", + "subtitle": "Short-lived", + "description": "Lasting for a very short time; transitory" + } +} +``` + +### Data File Structure + +- **Key**: Day of the year (1-366 for leap years) +- **title**: Main text displayed in bold white font +- **subtitle**: Secondary text displayed in smaller font +- **description**: Longer description (optional, used if subtitle is empty) + +## Creating Custom Categories + +### Step 1: Create a Data File + +Create a new JSON file in the `data/` directory: + +```bash +touch data/my_custom_category.json +``` + +### Step 2: Add Content + +Add entries for each day of the year (1-366): + +```json +{ + "1": { + "title": "FIRST ITEM", + "subtitle": "Brief description", + "description": "Longer explanation if needed" + }, + "2": { + "title": "SECOND ITEM", + "subtitle": "Another description", + "description": "More details here" + } +} +``` + +### Step 3: Update Configuration + +Add your category to the config: + +```json +{ + "of_the_day": { + "categories": { + "my_custom_category": { + "enabled": true, + "data_file": "data/my_custom_category.json", + "display_name": "My Custom Category" + } + }, + "category_order": ["word_of_the_day", "my_custom_category"] + } +} +``` + +## Using AI to Generate Content + +### Example: Word of the Day Generator + +You can use an LLM to generate a full year of content. Here's a Python script example: + +```python +import json +import openai + +def generate_word_of_the_day(): + """Generate a full year of word of the day entries using AI.""" + + words = {} + + for day in range(1, 367): + prompt = f""" + Generate a word of the day for day {day} of the year. + Include: + 1. An interesting word (all caps) + 2. A brief subtitle (2-3 words) + 3. A clear definition (1-2 sentences) + + Format as JSON: + {{ + "title": "WORD", + "subtitle": "Brief description", + "description": "Full definition" + }} + """ + + # Use your preferred AI service + response = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": prompt}] + ) + + # Parse the response and add to words dict + # Implementation depends on your AI service + + # Save to file + with open('data/ai_generated_words.json', 'w') as f: + json.dump(words, f, indent=4) + +if __name__ == "__main__": + generate_word_of_the_day() +``` + +### Example: Bible Verse Generator + +```python +def generate_bible_verses(): + """Generate a full year of inspirational bible verses.""" + + verses = {} + + for day in range(1, 367): + prompt = f""" + Generate an inspirational bible verse for day {day} of the year. + Include: + 1. Bible reference (e.g., "JOHN 3:16") + 2. Brief theme (e.g., "God's love") + 3. The verse text + + Format as JSON: + {{ + "title": "BIBLE REFERENCE", + "subtitle": "Brief theme", + "description": "Full verse text" + }} + """ + + # Implementation with your AI service + + with open('data/ai_generated_verses.json', 'w') as f: + json.dump(verses, f, indent=4) +``` + +## Category Ideas + +Here are some ideas for custom categories: + +### Educational +- **Vocabulary Word of the Day**: Expand your vocabulary +- **Math Problem of the Day**: Daily math challenges +- **Science Fact of the Day**: Interesting scientific facts +- **History Event of the Day**: Historical events that happened on this date + +### Language Learning +- **Spanish Word of the Day**: Learn Spanish vocabulary +- **French Word of the Day**: Learn French vocabulary +- **German Word of the Day**: Learn German vocabulary +- **Japanese Word of the Day**: Learn Japanese vocabulary + +### Inspirational +- **Bible Verse of the Day**: Daily scripture +- **Quote of the Day**: Inspirational quotes +- **Affirmation of the Day**: Positive affirmations +- **Meditation of the Day**: Daily meditation prompts + +### Professional +- **Programming Tip of the Day**: Daily coding tips +- **Business Quote of the Day**: Business wisdom +- **Leadership Lesson of the Day**: Leadership insights +- **Productivity Tip of the Day**: Daily productivity advice + +### Entertainment +- **Movie Quote of the Day**: Famous movie quotes +- **Song Lyric of the Day**: Inspirational song lyrics +- **Joke of the Day**: Daily humor +- **Trivia Question of the Day**: Daily trivia + +## Display Layout + +The display uses a layout similar to the calendar manager: + +- **Title**: Bold white text at the top +- **Subtitle**: Smaller gray text below the title +- **Description**: Wrapped text if subtitle is empty + +## Troubleshooting + +### Common Issues + +1. **No content displayed**: Check that your data file exists and has entries for the current day +2. **File not found**: Ensure the data file path is correct relative to the project root +3. **Display not showing**: Verify the category is enabled in the configuration +4. **Wrong day content**: The system uses day of year (1-366), not calendar date + +### Debugging + +Check the logs for error messages: + +```bash +tail -f /var/log/ledmatrix.log +``` + +Common log messages: +- `"OfTheDayManager initialized: Object"` - Manager loaded successfully +- `"Loaded data file for category_name: X items"` - Data file loaded +- `"Displaying category_name: title"` - Content being displayed + +## Advanced Configuration + +### Custom Display Colors + +You can modify the colors in the `OfTheDayManager` class: + +```python +self.title_color = (255, 255, 255) # White +self.subtitle_color = (200, 200, 200) # Light gray +self.background_color = (0, 0, 0) # Black +``` + +### Custom Fonts + +The system uses the same fonts as other displays: +- **Title**: `regular_font` (Press Start 2P) +- **Subtitle/Description**: `small_font` (Press Start 2P) + +## Integration with Other Systems + +The "Of The Day" system integrates seamlessly with: +- **Display Controller**: Automatic rotation with other displays +- **Schedule System**: Respects display schedule settings +- **Music Manager**: Properly handles music display transitions +- **Live Sports**: Prioritized over regular displays when games are live + +## Performance Considerations + +- Data files are loaded once at startup +- Daily content is cached and only reloaded when the date changes +- Display updates are minimal to maintain smooth performance +- Text wrapping is optimized for the LED matrix display + +## Future Enhancements + +Potential improvements: +- **API Integration**: Pull content from external APIs +- **User Interface**: Web interface for content management +- **Analytics**: Track which content is most engaging +- **Scheduling**: Custom schedules for different categories +- **Multi-language**: Support for different languages in the interface \ No newline at end of file diff --git a/of_the_day/slovenian_word_of_the_day.json b/of_the_day/slovenian_word_of_the_day.json new file mode 100644 index 00000000..e1969733 --- /dev/null +++ b/of_the_day/slovenian_word_of_the_day.json @@ -0,0 +1,1827 @@ +{ + "1": { + "title": "ŽIVJO", + "subtitle": "Hello", + "description": "A casual greeting used to say hi" + }, + "2": { + "title": "HVALA", + "subtitle": "Thank you", + "description": "An expression of gratitude" + }, + "3": { + "title": "PROSIM", + "subtitle": "Please / You're welcome", + "description": "Used to make polite requests or respond to thanks" + }, + "4": { + "title": "DOBRO JUTRO", + "subtitle": "Good morning", + "description": "A greeting used in the morning" + }, + "5": { + "title": "LAHKO NOČ", + "subtitle": "Good night", + "description": "A phrase said before going to sleep or leaving at night" + }, + "6": { + "title": "NI ZA KAJ", + "subtitle": "You're welcome", + "description": "A response to 'thank you', meaning it's nothing" + }, + "7": { + "title": "OPROSTI", + "subtitle": "Sorry", + "description": "Used to apologize or ask for forgiveness" + }, + "8": { + "title": "ADIJO", + "subtitle": "Goodbye", + "description": "A casual farewell" + }, + "9": { + "title": "DA", + "subtitle": "Yes", + "description": "An affirmative answer" + }, + "10": { + "title": "NE", + "subtitle": "No", + "description": "A negative answer" + }, + "11": { + "title": "JAZ", + "subtitle": "I", + "description": "First person singular pronoun" + }, + "12": { + "title": "TI", + "subtitle": "You (singular, informal)", + "description": "Second person singular pronoun, used with friends and family" + }, + "13": { + "title": "ON", + "subtitle": "He", + "description": "Third person masculine singular pronoun" + }, + "14": { + "title": "ONA", + "subtitle": "She", + "description": "Third person feminine singular pronoun" + }, + "15": { + "title": "ONO", + "subtitle": "It", + "description": "Third person neutral singular pronoun" + }, + "16": { + "title": "MI", + "subtitle": "We", + "description": "First person plural pronoun" + }, + "17": { + "title": "VI", + "subtitle": "You (plural/formal singular)", + "description": "Second person plural pronoun or formal singular" + }, + "18": { + "title": "ONI", + "subtitle": "They (masculine)", + "description": "Third person masculine plural pronoun" + }, + "19": { + "title": "ONE", + "subtitle": "They (feminine)", + "description": "Third person feminine plural pronoun" + }, + "20": { + "title": "DOBER DAN", + "subtitle": "Good day", + "description": "A general greeting used throughout the day" + }, + "21": { + "title": "DOBER VEČER", + "subtitle": "Good evening", + "description": "A greeting used in the evening" + }, + "22": { + "title": "KAKO SI?", + "subtitle": "How are you? (informal)", + "description": "Asking about someone's well-being" + }, + "23": { + "title": "KAKO STE?", + "subtitle": "How are you? (formal/plural)", + "description": "Asking about someone's well-being formally or a group" + }, + "24": { + "title": "SEM DOBRO", + "subtitle": "I am well", + "description": "A common response to 'How are you?'" + }, + "25": { + "title": "IME MI JE...", + "subtitle": "My name is...", + "description": "Introducing yourself" + }, + "26": { + "title": "SEM IZ...", + "subtitle": "I am from...", + "description": "Stating your origin" + }, + "27": { + "title": "RAZUMEM", + "subtitle": "I understand", + "description": "Expressing comprehension" + }, + "28": { + "title": "NE RAZUMEM", + "subtitle": "I don't understand", + "description": "Expressing lack of comprehension" + }, + "29": { + "title": "GOVORITE ANGLEŠKO?", + "subtitle": "Do you speak English?", + "description": "Asking if someone speaks English" + }, + "30": { + "title": "MALO", + "subtitle": "A little", + "description": "Indicating a small amount or limited ability" + }, + "31": { + "title": "DA, MALO", + "subtitle": "Yes, a little", + "description": "Affirming limited ability" + }, + "32": { + "title": "PONOVITE, PROSIM", + "subtitle": "Repeat, please", + "description": "Asking someone to repeat what they said" + }, + "33": { + "title": "POČASNEJE, PROSIM", + "subtitle": "Slower, please", + "description": "Asking someone to speak more slowly" + }, + "34": { + "title": "KJE JE...?", + "subtitle": "Where is...?", + "description": "Asking for directions to a place" + }, + "35": { + "title": "WC", + "subtitle": "Toilet/Restroom", + "description": "Short for 'water closet', commonly used for restroom" + }, + "36": { + "title": "HRANA", + "subtitle": "Food", + "description": "General term for edible substances" + }, + "37": { + "title": "VODA", + "subtitle": "Water", + "description": "Essential liquid for drinking" + }, + "38": { + "title": "KAVA", + "subtitle": "Coffee", + "description": "A popular brewed beverage" + }, + "39": { + "title": "ČAJ", + "subtitle": "Tea", + "description": "A brewed beverage, often hot" + }, + "40": { + "title": "PIVO", + "subtitle": "Beer", + "description": "An alcoholic beverage" + }, + "41": { + "title": "VINO", + "subtitle": "Wine", + "description": "An alcoholic beverage made from fermented grapes" + }, + "42": { + "title": "KOLIKO STANE?", + "subtitle": "How much does it cost?", + "description": "Asking for the price of something" + }, + "43": { + "title": "RAČUN, PROSIM", + "subtitle": "The bill, please", + "description": "Asking for the check in a restaurant" + }, + "44": { + "title": "ODPRTO", + "subtitle": "Open", + "description": "Indicates a business is currently open" + }, + "45": { + "title": "ZAPRTO", + "subtitle": "Closed", + "description": "Indicates a business is currently closed" + }, + "46": { + "title": "POMOČ!", + "subtitle": "Help!", + "description": "A cry for assistance" + }, + "47": { + "title": "JAZ BI ŽELEL/A...", + "subtitle": "I would like...", + "description": "Politely expressing a desire (želEL for male, želELA for female)" + }, + "48": { + "title": "DOBRO", + "subtitle": "Good", + "description": "Positive affirmation" + }, + "49": { + "title": "SLABO", + "subtitle": "Bad", + "description": "Negative affirmation" + }, + "50": { + "title": "VELIKO", + "subtitle": "A lot/Much", + "description": "Indicating a large quantity" + }, + "51": { + "title": "MALO", + "subtitle": "A little/Few", + "description": "Indicating a small quantity" + }, + "52": { + "title": "ŠTEVILKE", + "subtitle": "Numbers", + "description": "Numerical values" + }, + "53": { + "title": "ENA", + "subtitle": "One", + "description": "The number 1" + }, + "54": { + "title": "DVA", + "subtitle": "Two", + "description": "The number 2" + }, + "55": { + "title": "TRI", + "subtitle": "Three", + "description": "The number 3" + }, + "56": { + "title": "ŠTIRI", + "subtitle": "Four", + "description": "The number 4" + }, + "57": { + "title": "PET", + "subtitle": "Five", + "description": "The number 5" + }, + "58": { + "title": "ŠEST", + "subtitle": "Six", + "description": "The number 6" + }, + "59": { + "title": "SEDEM", + "subtitle": "Seven", + "description": "The number 7" + }, + "60": { + "title": "OSEM", + "subtitle": "Eight", + "description": "The number 8" + }, + "61": { + "title": "DEVET", + "subtitle": "Nine", + "description": "The number 9" + }, + "62": { + "title": "DESET", + "subtitle": "Ten", + "description": "The number 10" + }, + "63": { + "title": "DANAJST", + "subtitle": "Eleven", + "description": "The number 11" + }, + "64": { + "title": "DVANAJST", + "subtitle": "Twelve", + "description": "The number 12" + }, + "65": { + "title": "TRINAJST", + "subtitle": "Thirteen", + "description": "The number 13" + }, + "66": { + "title": "ŠTIRINAJST", + "subtitle": "Fourteen", + "description": "The number 14" + }, + "67": { + "title": "PETNAJST", + "subtitle": "Fifteen", + "description": "The number 15" + }, + "68": { + "title": "ŠESTNAJST", + "subtitle": "Sixteen", + "description": "The number 16" + }, + "69": { + "title": "SEDEMNAJST", + "subtitle": "Seventeen", + "description": "The number 17" + }, + "70": { + "title": "OSEMNAJST", + "subtitle": "Eighteen", + "description": "The number 18" + }, + "71": { + "title": "DEVETNAJST", + "subtitle": "Nineteen", + "description": "The number 19" + }, + "72": { + "title": "DVADESET", + "subtitle": "Twenty", + "description": "The number 20" + }, + "73": { + "title": "TRIDESET", + "subtitle": "Thirty", + "description": "The number 30" + }, + "74": { + "title": "ŠTIRIDESET", + "subtitle": "Forty", + "description": "The number 40" + }, + "75": { + "title": "PETDESET", + "subtitle": "Fifty", + "description": "The number 50" + }, + "76": { + "title": "STO", + "subtitle": "One hundred", + "description": "The number 100" + }, + "77": { + "title": "TISOČ", + "subtitle": "One thousand", + "description": "The number 1000" + }, + "78": { + "title": "DANES", + "subtitle": "Today", + "description": "Referring to the current day" + }, + "79": { + "title": "JUTRI", + "subtitle": "Tomorrow", + "description": "Referring to the day after today" + }, + "80": { + "title": "VČERAJ", + "subtitle": "Yesterday", + "description": "Referring to the day before today" + }, + "81": { + "title": "ZDRAVJE!", + "subtitle": "Cheers! / Bless you!", + "description": "A toast or a response to a sneeze" + }, + "82": { + "title": "VESEL BOŽIČ!", + "subtitle": "Merry Christmas!", + "description": "A Christmas greeting" + }, + "83": { + "title": "SREČNO NOVO LETO!", + "subtitle": "Happy New Year!", + "description": "A New Year's greeting" + }, + "84": { + "title": "SREČEN ROJSTNI DAN!", + "subtitle": "Happy Birthday!", + "description": "A birthday greeting" + }, + "85": { + "title": "KAJ JE TO?", + "subtitle": "What is this?", + "description": "Asking to identify an object" + }, + "86": { + "title": "KDO JE TO?", + "subtitle": "Who is this?", + "description": "Asking to identify a person" + }, + "87": { + "title": "KAJ POČNEŠ?", + "subtitle": "What are you doing? (informal)", + "description": "Asking about someone's current activity" + }, + "88": { + "title": "KAJ POČNETE?", + "subtitle": "What are you doing? (formal/plural)", + "description": "Asking about someone's current activity formally or a group" + }, + "89": { + "title": "SEM IZGUBLJEN/A", + "subtitle": "I am lost (male/female)", + "description": "Expressing that you don't know where you are" + }, + "90": { + "title": "LEVO", + "subtitle": "Left", + "description": "Directional term" + }, + "91": { + "title": "DESNO", + "subtitle": "Right", + "description": "Directional term" + }, + "92": { + "title": "NARAVNO", + "subtitle": "Straight (ahead)", + "description": "Directional term for straight" + }, + "93": { + "title": "TUKAJ", + "subtitle": "Here", + "description": "Referring to the current location" + }, + "94": { + "title": "TAM", + "subtitle": "There", + "description": "Referring to a location further away" + }, + "95": { + "title": "IMAM VPRAŠANJE", + "subtitle": "I have a question", + "description": "Indicating you wish to ask something" + }, + "96": { + "title": "SE VIDIVA!", + "subtitle": "See you!", + "description": "A casual farewell, meaning 'see you later'" + }, + "97": { + "title": "KJE JE NAJBLIŽJA BANKA?", + "subtitle": "Where is the nearest bank?", + "description": "Asking for the location of the closest bank" + }, + "98": { + "title": "SELA", + "subtitle": "Village", + "description": "A small populated area" + }, + "99": { + "title": "MESTO", + "subtitle": "City/Town", + "description": "A larger populated area" + }, + "100": { + "title": "CESTNINA", + "subtitle": "Toll", + "description": "A fee for using a road" + }, + "101": { + "title": "AVTO", + "subtitle": "Car", + "description": "A vehicle for transportation" + }, + "102": { + "title": "VLAK", + "subtitle": "Train", + "description": "Rail transport" + }, + "103": { + "title": "AVTOBUS", + "subtitle": "Bus", + "description": "Public road transport" + }, + "104": { + "title": "LETALO", + "subtitle": "Airplane", + "description": "Air transport" + }, + "105": { + "title": "LETALIŠČE", + "subtitle": "Airport", + "description": "Place for air travel" + }, + "106": { + "title": "ŽELEZNIŠKA POSTAJA", + "subtitle": "Train station", + "description": "Place for train travel" + }, + "107": { + "title": "AVTOBUSNA POSTAJA", + "subtitle": "Bus station", + "description": "Place for bus travel" + }, + "108": { + "title": "HOTEL", + "subtitle": "Hotel", + "description": "Accommodation for travelers" + }, + "109": { + "title": "SOBA", + "subtitle": "Room", + "description": "A space within a building" + }, + "110": { + "title": "KLJUČ", + "subtitle": "Key", + "description": "Device for opening locks" + }, + "111": { + "title": "ZAJTRK", + "subtitle": "Breakfast", + "description": "The first meal of the day" + }, + "112": { + "title": "KOSILO", + "subtitle": "Lunch", + "description": "The midday meal" + }, + "113": { + "title": "VEČERJA", + "subtitle": "Dinner", + "description": "The evening meal" + }, + "114": { + "title": "MENI", + "subtitle": "Menu", + "description": "List of food and drink options" + }, + "115": { + "title": "STEKLO", + "subtitle": "Glass (for drinking)", + "description": "A drinking vessel" + }, + "116": { + "title": "KROŽNIK", + "subtitle": "Plate", + "description": "A flat dish for serving food" + }, + "117": { + "title": "VILICE", + "subtitle": "Fork", + "description": "An eating utensil" + }, + "118": { + "title": "NOŽ", + "subtitle": "Knife", + "description": "An eating utensil or tool for cutting" + }, + "119": { + "title": "ŽLICA", + "subtitle": "Spoon", + "description": "An eating utensil" + }, + "120": { + "title": "SOL", + "subtitle": "Salt", + "description": "A common seasoning" + }, + "121": { + "title": "POPER", + "subtitle": "Pepper", + "description": "A common seasoning" + }, + "122": { + "title": "KRUH", + "subtitle": "Bread", + "description": "A staple food" + }, + "123": { + "title": "SIR", + "subtitle": "Cheese", + "description": "A dairy product" + }, + "124": { + "title": "MESO", + "subtitle": "Meat", + "description": "Animal flesh used as food" + }, + "125": { + "title": "RIBA", + "subtitle": "Fish", + "description": "An aquatic animal used as food" + }, + "126": { + "title": "ZELENJAVA", + "subtitle": "Vegetables", + "description": "Plant parts used as food" + }, + "127": { + "title": "SADJE", + "subtitle": "Fruit", + "description": "Sweet, fleshy plant products" + }, + "128": { + "title": "SLADOLED", + "subtitle": "Ice cream", + "description": "A frozen dessert" + }, + "129": { + "title": "SLADKOR", + "subtitle": "Sugar", + "description": "A sweet crystalline substance" + }, + "130": { + "title": "MLEKO", + "subtitle": "Milk", + "description": "A dairy drink" + }, + "131": { + "title": "JAJCE", + "subtitle": "Egg", + "description": "An oval reproductive body of a bird" + }, + "132": { + "title": "PIŠČANEC", + "subtitle": "Chicken", + "description": "Poultry meat" + }, + "133": { + "title": "GOVEDINA", + "subtitle": "Beef", + "description": "Meat from cattle" + }, + "134": { + "title": "SVINJINA", + "subtitle": "Pork", + "description": "Meat from a pig" + }, + "135": { + "title": "SOLATA", + "subtitle": "Salad", + "description": "A cold dish of mixed ingredients" + }, + "136": { + "title": "JUHA", + "subtitle": "Soup", + "description": "A liquid food" + }, + "137": { + "title": "DESERT", + "subtitle": "Dessert", + "description": "Sweet course at the end of a meal" + }, + "138": { + "title": "VEGANSKO", + "subtitle": "Vegan", + "description": "Food containing no animal products" + }, + "139": { + "title": "VEGETARIJANSKO", + "subtitle": "Vegetarian", + "description": "Food containing no meat" + }, + "140": { + "title": "ALI JE TO SVEŽE?", + "subtitle": "Is this fresh?", + "description": "Asking about the freshness of food" + }, + "141": { + "title": "DAN", + "subtitle": "Day", + "description": "A period of 24 hours" + }, + "142": { + "title": "TEDEN", + "subtitle": "Week", + "description": "A period of seven days" + }, + "143": { + "title": "MESEC", + "subtitle": "Month", + "description": "A period of approximately 30 or 31 days" + }, + "144": { + "title": "LETO", + "subtitle": "Year", + "description": "A period of 365 or 366 days" + }, + "145": { + "title": "URA", + "subtitle": "Hour/Clock", + "description": "A unit of time or a device for measuring time" + }, + "146": { + "title": "MINUTA", + "subtitle": "Minute", + "description": "A unit of time, 60 seconds" + }, + "147": { + "title": "SEKUNDA", + "subtitle": "Second", + "description": "A unit of time" + }, + "148": { + "title": "ZDRAVNIK", + "subtitle": "Doctor", + "description": "A medical professional" + }, + "149": { + "title": "BOLNIŠNICA", + "subtitle": "Hospital", + "description": "A place for medical care" + }, + "150": { + "title": "BOLEČINA", + "subtitle": "Pain", + "description": "An unpleasant physical sensation" + }, + "151": { + "title": "GLAVOBOL", + "subtitle": "Headache", + "description": "Pain in the head" + }, + "152": { + "title": "VROČINA", + "subtitle": "Fever/Heat", + "description": "Elevated body temperature or high temperature" + }, + "153": { + "title": "APOTEKA/LEKARNA", + "subtitle": "Pharmacy", + "description": "A place to buy medicine" + }, + "154": { + "title": "RECEPT", + "subtitle": "Prescription", + "description": "A medical order for medicine" + }, + "155": { + "title": "ALERGIJA", + "subtitle": "Allergy", + "description": "An adverse immune reaction" + }, + "156": { + "title": "NUJNO!", + "subtitle": "Urgent! / Emergency!", + "description": "Signifying a pressing situation" + }, + "157": { + "title": "POLICIJA", + "subtitle": "Police", + "description": "Law enforcement agency" + }, + "158": { + "title": "POŽAR!", + "subtitle": "Fire!", + "description": "A call for help regarding a fire" + }, + "159": { + "title": "TO JE POMEMBNO", + "subtitle": "This is important", + "description": "Emphasizing significance" + }, + "160": { + "title": "KAJ PA TI?", + "subtitle": "What about you? (informal)", + "description": "Returning a question to someone" + }, + "161": { + "title": "KAKO SE REČE...?", + "subtitle": "How do you say...?", + "description": "Asking for a translation" + }, + "162": { + "title": "RAZUMETE?", + "subtitle": "Do you understand? (formal/plural)", + "description": "Checking for comprehension" + }, + "163": { + "title": "NEGOVORIM SLOVENSKO", + "subtitle": "I don't speak Slovenian", + "description": "Stating your lack of Slovenian proficiency" + }, + "164": { + "title": "GOVORITE POČASNEJE", + "subtitle": "Speak slower", + "description": "Requesting a slower pace of speech" + }, + "165": { + "title": "ALI LAHKO PONOVITE?", + "subtitle": "Can you repeat that?", + "description": "Asking for something to be said again" + }, + "166": { + "title": "KOLIKO JE URA?", + "subtitle": "What time is it?", + "description": "Asking for the current time" + }, + "167": { + "title": "DANES JE...", + "subtitle": "Today is...", + "description": "Stating the current day" + }, + "168": { + "title": "PONEDELJEK", + "subtitle": "Monday", + "description": "The first day of the week" + }, + "169": { + "title": "TOREK", + "subtitle": "Tuesday", + "description": "The second day of the week" + }, + "170": { + "title": "SREDA", + "subtitle": "Wednesday", + "description": "The third day of the week" + }, + "171": { + "title": "ČETRTEK", + "subtitle": "Thursday", + "description": "The fourth day of the week" + }, + "172": { + "title": "PETEK", + "subtitle": "Friday", + "description": "The fifth day of the week" + }, + "173": { + "title": "SOBOTA", + "subtitle": "Saturday", + "description": "The sixth day of the week" + }, + "174": { + "title": "NEDELJA", + "subtitle": "Sunday", + "description": "The seventh day of the week" + }, + "175": { + "title": "JANUAR", + "subtitle": "January", + "description": "The first month of the year" + }, + "176": { + "title": "FEBRUAR", + "subtitle": "February", + "description": "The second month of the year" + }, + "177": { + "title": "MAREC", + "subtitle": "March", + "description": "The third month of the year" + }, + "178": { + "title": "APRIL", + "subtitle": "April", + "description": "The fourth month of the year" + }, + "179": { + "title": "MAJ", + "subtitle": "May", + "description": "The fifth month of the year" + }, + "180": { + "title": "JUNIJ", + "subtitle": "June", + "description": "The sixth month of the year" + }, + "181": { + "title": "JULIJ", + "subtitle": "July", + "description": "The seventh month of the year" + }, + "182": { + "title": "AVGUST", + "subtitle": "August", + "description": "The eighth month of the year" + }, + "183": { + "title": "SEPTEMBER", + "subtitle": "September", + "description": "The ninth month of the year" + }, + "184": { + "title": "OKTOBER", + "subtitle": "October", + "description": "The tenth month of the year" + }, + "185": { + "title": "NOVEMBER", + "subtitle": "November", + "description": "The eleventh month of the year" + }, + "186": { + "title": "DECEMBER", + "subtitle": "December", + "description": "The twelfth month of the year" + }, + "187": { + "title": "ZELO", + "subtitle": "Very", + "description": "An intensifier" + }, + "188": { + "title": "PREVEČ", + "subtitle": "Too much", + "description": "Indicating an excessive amount" + }, + "189": { + "title": "NIČ", + "subtitle": "Nothing", + "description": "Absence of anything" + }, + "190": { + "title": "VEDNO", + "subtitle": "Always", + "description": "At all times" + }, + "191": { + "title": "NIKOLI", + "subtitle": "Never", + "description": "At no time" + }, + "192": { + "title": "VČASIH", + "subtitle": "Sometimes", + "description": "On some occasions" + }, + "193": { + "title": "ZDRAVO!", + "subtitle": "Hello! (also formal)", + "description": "A greeting, often more formal than 'Živjo'" + }, + "194": { + "title": "SREČNO!", + "subtitle": "Good luck!", + "description": "Wishing someone well" + }, + "195": { + "title": "UŽIVAJTE!", + "subtitle": "Enjoy! (formal/plural)", + "description": "Wishing someone to have a good time" + }, + "196": { + "title": "LAHKO BI", + "subtitle": "Maybe", + "description": "Expressing possibility" + }, + "197": { + "title": "SEVEDA", + "subtitle": "Of course", + "description": "Expressing agreement or certainty" + }, + "198": { + "title": "KJE JE RESTAVRACIJA?", + "subtitle": "Where is the restaurant?", + "description": "Asking for directions to a place to eat" + }, + "199": { + "title": "PROSIMO, SEDITE", + "subtitle": "Please sit down (formal/plural)", + "description": "An invitation to sit" + }, + "200": { + "title": "JE DRAGO?", + "subtitle": "Is it expensive?", + "description": "Asking about the cost" + }, + "201": { + "title": "JE POCENI?", + "subtitle": "Is it cheap?", + "description": "Asking if something is inexpensive" + }, + "202": { + "title": "IMAM REZERVACIJO", + "subtitle": "I have a reservation", + "description": "Stating you have a booking" + }, + "203": { + "title": "ENKRAT", + "subtitle": "Once", + "description": "One time" + }, + "204": { + "title": "DVAKRAT", + "subtitle": "Twice", + "description": "Two times" + }, + "205": { + "title": "ŠTEVILO", + "subtitle": "Number", + "description": "A quantity" + }, + "206": { + "title": "KAKŠNA JE VREMENSKA NAPOVED?", + "subtitle": "What is the weather forecast?", + "description": "Asking about future weather" + }, + "207": { + "title": "SONČNO", + "subtitle": "Sunny", + "description": "Weather condition with sunshine" + }, + "208": { + "title": "OBLAČNO", + "subtitle": "Cloudy", + "description": "Weather condition with clouds" + }, + "209": { + "title": "DEŽUJE", + "subtitle": "It's raining", + "description": "Weather condition with rain" + }, + "210": { + "title": "SNEŽI", + "subtitle": "It's snowing", + "description": "Weather condition with snow" + }, + "211": { + "title": "VETER", + "subtitle": "Wind", + "description": "Moving air" + }, + "212": { + "title": "VROČE JE", + "subtitle": "It's hot", + "description": "Referring to high temperature" + }, + "213": { + "title": "MRZLO JE", + "subtitle": "It's cold", + "description": "Referring to low temperature" + }, + "214": { + "title": "KAJ POČNEŠ ZA ŽIVLJENJE?", + "subtitle": "What do you do for a living?", + "description": "Asking about someone's profession" + }, + "215": { + "title": "SEM ŠTUDENT/KA", + "subtitle": "I am a student (male/female)", + "description": "Stating your occupation as a student" + }, + "216": { + "title": "SEM TURIST/KA", + "subtitle": "I am a tourist (male/female)", + "description": "Stating your reason for visiting" + }, + "217": { + "title": "KAKŠNA JE VAŠA TELEFONSKA ŠTEVILKA?", + "subtitle": "What is your phone number?", + "description": "Asking for contact information" + }, + "218": { + "title": "KAJ JE VAŠ E-MAIL?", + "subtitle": "What is your email?", + "description": "Asking for email address" + }, + "219": { + "title": "ALI SPREJEMATE KREDITNE KARTICE?", + "subtitle": "Do you accept credit cards?", + "description": "Asking about payment methods" + }, + "220": { + "title": "SAMO GOTOVINA", + "subtitle": "Cash only", + "description": "Indicating only cash payment is accepted" + }, + "221": { + "title": "DENAR", + "subtitle": "Money", + "description": "Currency for transactions" + }, + "222": { + "title": "RAČUN", + "subtitle": "Bill/Receipt", + "description": "A statement of money owed or proof of purchase" + }, + "223": { + "title": "TRGOVINA", + "subtitle": "Shop/Store", + "description": "A place for buying goods" + }, + "224": { + "title": "SUPERMARKET", + "subtitle": "Supermarket", + "description": "A large self-service grocery store" + }, + "225": { + "title": "TRŽNICA", + "subtitle": "Market", + "description": "A public place for buying and selling" + }, + "226": { + "title": "BANKA", + "subtitle": "Bank", + "description": "A financial institution" + }, + "227": { + "title": "POŠTA", + "subtitle": "Post office", + "description": "A place for mail services" + }, + "228": { + "title": "MUZEJ", + "subtitle": "Museum", + "description": "A place for displaying artifacts" + }, + "229": { + "title": "GALERIJA", + "subtitle": "Gallery", + "description": "A place for art exhibitions" + }, + "230": { + "title": "CERKEV", + "subtitle": "Church", + "description": "A place of worship" + }, + "231": { + "title": "GRAD", + "subtitle": "Castle", + "description": "A large fortified building" + }, + "232": { + "title": "JEZERO", + "subtitle": "Lake", + "description": "A large body of water" + }, + "233": { + "title": "REKA", + "subtitle": "River", + "description": "A natural flowing watercourse" + }, + "234": { + "title": "GORA", + "subtitle": "Mountain", + "description": "A large natural elevation of the earth's surface" + }, + "235": { + "title": "GOZD", + "subtitle": "Forest/Woods", + "description": "A large area of trees" + }, + "236": { + "title": "PLAŽA", + "subtitle": "Beach", + "description": "A sandy or pebbly shore" + }, + "237": { + "title": "PARK", + "subtitle": "Park", + "description": "A public green space" + }, + "238": { + "title": "MOST", + "subtitle": "Bridge", + "description": "A structure carrying a road or railway" + }, + "239": { + "title": "TRG", + "subtitle": "Square (city)", + "description": "An open, public area in a city" + }, + "240": { + "title": "ULICA", + "subtitle": "Street", + "description": "A public road in a city" + }, + "241": { + "title": "NUMER", + "subtitle": "Number (as in address)", + "description": "A numerical identifier" + }, + "242": { + "title": "AVTOBUSNA POSTAJA", + "subtitle": "Bus stop", + "description": "A designated place for buses to stop" + }, + "243": { + "title": "TAKSI", + "subtitle": "Taxi", + "description": "A car for hire with a driver" + }, + "244": { + "title": "VOZNIK", + "subtitle": "Driver", + "description": "A person who drives a vehicle" + }, + "245": { + "title": "KARTA", + "subtitle": "Ticket/Map", + "description": "A piece of paper for entry or a drawing of an area" + }, + "246": { + "title": "VOZNI RED", + "subtitle": "Timetable", + "description": "A schedule of departures and arrivals" + }, + "247": { + "title": "ODHOD", + "subtitle": "Departure", + "description": "The act of leaving" + }, + "248": { + "title": "PRIHOD", + "subtitle": "Arrival", + "description": "The act of arriving" + }, + "249": { + "title": "POTNI LIST", + "subtitle": "Passport", + "description": "An official travel document" + }, + "250": { + "title": "VILA", + "subtitle": "Visa", + "description": "An endorsement on a passport permitting entry" + }, + "251": { + "title": "NAJEM", + "subtitle": "Rent", + "description": "To pay for the use of something" + }, + "252": { + "title": "KUPITI", + "subtitle": "To buy", + "description": "To acquire something in exchange for money" + }, + "253": { + "title": "PRODATI", + "subtitle": "To sell", + "description": "To give something in exchange for money" + }, + "254": { + "title": "HRVAT", + "subtitle": "Croatian (person)", + "description": "A person from Croatia" + }, + "255": { + "title": "NEMEC", + "subtitle": "German (person)", + "description": "A person from Germany" + }, + "256": { + "title": "AVSTRIJEC", + "subtitle": "Austrian (person)", + "description": "A person from Austria" + }, + "257": { + "title": "ITALIJAN", + "subtitle": "Italian (person)", + "description": "A person from Italy" + }, + "258": { + "title": "MADŽAR", + "subtitle": "Hungarian (person)", + "description": "A person from Hungary" + }, + "259": { + "title": "AMERIČAN", + "subtitle": "American (person)", + "description": "A person from America" + }, + "260": { + "title": "ANGLEŠČINA", + "subtitle": "English language", + "description": "The English language" + }, + "261": { + "title": "SLOVENŠČINA", + "subtitle": "Slovenian language", + "description": "The Slovenian language" + }, + "262": { + "title": "JEZIK", + "subtitle": "Language/Tongue", + "description": "A system of communication or a body part" + }, + "263": { + "title": "Knjiga", + "subtitle": "Book", + "description": "A written or printed work" + }, + "264": { + "title": "ČASOPIS", + "subtitle": "Newspaper", + "description": "A periodical publication" + }, + "265": { + "title": "REVJIA", + "subtitle": "Magazine", + "description": "A periodical publication" + }, + "266": { + "title": "INTERNET", + "subtitle": "Internet", + "description": "A global computer network" + }, + "267": { + "title": "TELEFON", + "subtitle": "Telephone", + "description": "A device for communication" + }, + "268": { + "title": "MOBILNI TELEFON", + "subtitle": "Mobile phone", + "description": "A portable telephone" + }, + "269": { + "title": "RAČUNALNIK", + "subtitle": "Computer", + "description": "An electronic device for processing data" + }, + "270": { + "title": "SPLETNA STRAN", + "subtitle": "Website", + "description": "A set of related web pages" + }, + "271": { + "title": "E-POŠTA", + "subtitle": "Email", + "description": "Electronic mail" + }, + "272": { + "title": "FOTOGRAFIJA", + "subtitle": "Photograph", + "description": "An image captured by a camera" + }, + "273": { + "title": "KAMERA", + "subtitle": "Camera", + "description": "A device for taking pictures" + }, + "274": { + "title": "SPOMIN", + "subtitle": "Memory/Souvenir", + "description": "Something remembered or a keepsake" + }, + "275": { + "title": "DARILO", + "subtitle": "Gift", + "description": "Something given willingly" + }, + "276": { + "title": "CVETJE", + "subtitle": "Flowers", + "description": "The reproductive part of a plant" + }, + "277": { + "title": "BARVE", + "subtitle": "Colors", + "description": "Properties of light" + }, + "278": { + "title": "RDEČA", + "subtitle": "Red", + "description": "A primary color" + }, + "279": { + "title": "MODRA", + "subtitle": "Blue", + "description": "A primary color" + }, + "280": { + "title": "ZELENA", + "subtitle": "Green", + "description": "A primary color" + }, + "281": { + "title": "RUMENA", + "subtitle": "Yellow", + "description": "A primary color" + }, + "282": { + "title": "ORANŽNA", + "subtitle": "Orange", + "description": "A secondary color" + }, + "283": { + "title": "VIJOLIČNA", + "subtitle": "Purple/Violet", + "description": "A secondary color" + }, + "284": { + "title": "ČRNA", + "subtitle": "Black", + "description": "The darkest color" + }, + "285": { + "title": "BELA", + "subtitle": "White", + "description": "The lightest color" + }, + "286": { + "title": "SIVA", + "subtitle": "Gray", + "description": "A neutral color" + }, + "287": { + "title": "ROZA", + "subtitle": "Pink", + "description": "A pale red color" + }, + "288": { + "title": "RJAVA", + "subtitle": "Brown", + "description": "A dark earthy color" + }, + "289": { + "title": "ZLATA", + "subtitle": "Gold", + "description": "A metallic yellow color" + }, + "290": { + "title": "SREBRNA", + "subtitle": "Silver", + "description": "A metallic gray color" + }, + "291": { + "title": "SESTRIČNA", + "subtitle": "Cousin (female)", + "description": "A child of one's aunt or uncle" + }, + "292": { + "title": "BRATRANEC", + "subtitle": "Cousin (male)", + "description": "A child of one's aunt or uncle" + }, + "293": { + "title": "MOŽ", + "subtitle": "Husband", + "description": "A married man" + }, + "294": { + "title": "ŽENA", + "subtitle": "Wife", + "description": "A married woman" + }, + "295": { + "title": "SIN", + "subtitle": "Son", + "description": "A male child" + }, + "296": { + "title": "HČI", + "subtitle": "Daughter", + "description": "A female child" + }, + "297": { + "title": "BRAT", + "subtitle": "Brother", + "description": "A male sibling" + }, + "298": { + "title": "SESTRA", + "subtitle": "Sister", + "description": "A female sibling" + }, + "299": { + "title": "STARŠI", + "subtitle": "Parents", + "description": "A mother and father" + }, + "300": { + "title": "OTROCI", + "subtitle": "Children", + "description": "Young human beings" + }, + "301": { + "title": "DRUŽINA", + "subtitle": "Family", + "description": "A group of related people" + }, + "302": { + "title": "PRIJATELJ/ICA", + "subtitle": "Friend (male/female)", + "description": "A person with whom one has a bond of mutual affection" + }, + "303": { + "title": "FANT", + "subtitle": "Boyfriend/Boy", + "description": "A male romantic partner or a male child" + }, + "304": { + "title": "DEKLE", + "subtitle": "Girlfriend/Girl", + "description": "A female romantic partner or a female child" + }, + "305": { + "title": "LEPO JE", + "subtitle": "It's beautiful", + "description": "Describing something aesthetically pleasing" + }, + "306": { + "title": "GRDO JE", + "subtitle": "It's ugly", + "description": "Describing something aesthetically unpleasing" + }, + "307": { + "title": "VELIKO", + "subtitle": "Big/Large", + "description": "Referring to size" + }, + "308": { + "title": "MAJHNO", + "subtitle": "Small", + "description": "Referring to size" + }, + "309": { + "title": "NOVO", + "subtitle": "New", + "description": "Recently created or discovered" + }, + "310": { + "title": "STARO", + "subtitle": "Old", + "description": "Having lived or existed for a long time" + }, + "311": { + "title": "HITRO", + "subtitle": "Fast", + "description": "Moving or operating at high speed" + }, + "312": { + "title": "POČASI", + "subtitle": "Slow", + "description": "Moving or operating at low speed" + }, + "313": { + "title": "BLIZU", + "subtitle": "Near", + "description": "At a short distance" + }, + "314": { + "title": "DALEČ", + "subtitle": "Far", + "description": "At a long distance" + }, + "315": { + "title": "VROČE", + "subtitle": "Hot (temperature)", + "description": "Having a high temperature" + }, + "316": { + "title": "MRZLO", + "subtitle": "Cold (temperature)", + "description": "Having a low temperature" + }, + "317": { + "title": "LAHKO", + "subtitle": "Easy/Light (weight)", + "description": "Not difficult or not heavy" + }, + "318": { + "title": "TEŽKO", + "subtitle": "Difficult/Heavy", + "description": "Not easy or having great weight" + }, + "319": { + "title": "ČISTO", + "subtitle": "Clean", + "description": "Free from dirt" + }, + "320": { + "title": "UMAZANO", + "subtitle": "Dirty", + "description": "Covered or marked with dirt" + }, + "321": { + "title": "ODLIČNO!", + "subtitle": "Excellent!", + "description": "Expressing great satisfaction" + }, + "322": { + "title": "SUPR!", + "subtitle": "Great! / Super!", + "description": "Expressing enthusiasm" + }, + "323": { + "title": "NAPAKA", + "subtitle": "Mistake/Error", + "description": "An action or judgment that is misguided or wrong" + }, + "324": { + "title": "PRAVILNO", + "subtitle": "Correct/Right", + "description": "In accordance with truth or fact" + }, + "325": { + "title": "NAROBE", + "subtitle": "Wrong", + "description": "Incorrect or mistaken" + }, + "326": { + "title": "VREDNO", + "subtitle": "Worth it", + "description": "Justifiable in return for the effort or expense involved" + }, + "327": { + "title": "NI VREDNO", + "subtitle": "Not worth it", + "description": "Not justifiable in return for the effort or expense involved" + }, + "328": { + "title": "POMOČ!", + "subtitle": "Help!", + "description": "A cry for assistance" + }, + "329": { + "title": "HODITI", + "subtitle": "To walk", + "description": "To move by putting one foot in front of the other" + }, + "330": { + "title": "TEČI", + "subtitle": "To run", + "description": "To move at a speed faster than walking" + }, + "331": { + "title": "JESTI", + "subtitle": "To eat", + "description": "To put food into the mouth and chew and swallow it" + }, + "332": { + "title": "PITI", + "subtitle": "To drink", + "description": "To take a liquid into the mouth and swallow" + }, + "333": { + "title": "SPATI", + "subtitle": "To sleep", + "description": "To rest with eyes closed and mind unconscious" + }, + "334": { + "title": "BRATI", + "subtitle": "To read", + "description": "To look at and comprehend the meaning of written or printed matter" + }, + "335": { + "title": "PISATI", + "subtitle": "To write", + "description": "To mark letters, words, or other symbols on a surface" + }, + "336": { + "title": "GOVORITI", + "subtitle": "To speak", + "description": "To utter words or articulate sounds" + }, + "337": { + "title": "SLIŠATI", + "subtitle": "To hear", + "description": "To perceive sound with the ear" + }, + "338": { + "title": "VIDETI", + "subtitle": "To see", + "description": "To perceive with the eyes" + }, + "339": { + "title": "VZETI", + "subtitle": "To take", + "description": "To lay hold of something" + }, + "340": { + "title": "DATI", + "subtitle": "To give", + "description": "To hand over something to someone" + }, + "341": { + "title": "PRITI", + "subtitle": "To come", + "description": "To move or travel towards a place" + }, + "342": { + "title": "ITI", + "subtitle": "To go", + "description": "To move from one place to another" + }, + "343": { + "title": "ŽIVETI", + "subtitle": "To live", + "description": "To reside or exist" + }, + "344": { + "title": "UMRETI", + "subtitle": "To die", + "description": "To cease to live" + }, + "345": { + "title": "LJUBITI", + "subtitle": "To love", + "description": "To feel deep affection for" + }, + "346": { + "title": "SOVRAŽITI", + "subtitle": "To hate", + "description": "To feel intense dislike for" + }, + "347": { + "title": "DELATI", + "subtitle": "To work/To do", + "description": "To exert oneself physically or mentally; to perform an action" + }, + "348": { + "title": "UČITI SE", + "subtitle": "To learn", + "description": "To gain knowledge or skill" + }, + "349": { + "title": "NAUČITI SE", + "subtitle": "To teach", + "description": "To impart knowledge or skill" + }, + "350": { + "title": "VEDETI", + "subtitle": "To know (facts/information)", + "description": "To have information or an understanding of something" + }, + "351": { + "title": "POZNATI", + "subtitle": "To know (people/places)", + "description": "To be familiar with a person or place" + }, + "352": { + "title": "ŽELETI", + "subtitle": "To want", + "description": "To desire or wish for something" + }, + "353": { + "title": "MORATI", + "subtitle": "To must/To have to", + "description": "To be obliged to do something" + }, + "354": { + "title": "LAHKO", + "subtitle": "To be able to/Can", + "description": "To have the capacity or ability to do something" + }, + "355": { + "title": "IMEJTE SE LEPO!", + "subtitle": "Have a nice time! (formal/plural)", + "description": "A friendly farewell wishing someone enjoyment" + }, + "356": { + "title": "ČUDOVITO!", + "subtitle": "Wonderful!", + "description": "Expressing great pleasure or admiration" + }, + "357": { + "title": "PREČUDOVITO!", + "subtitle": "Absolutely wonderful!", + "description": "Even stronger expression of admiration than 'čudovito'" + }, + "358": { + "title": "ALI LAHKO POMAGAM?", + "subtitle": "Can I help?", + "description": "Offering assistance" + }, + "359": { + "title": "POTREBUJEM POMOČ", + "subtitle": "I need help", + "description": "Asking for assistance" + }, + "360": { + "title": "HVALA ZA POMOČ", + "subtitle": "Thanks for the help", + "description": "Expressing gratitude for assistance" + }, + "361": { + "title": "KJE JE NAJBLIŽJI BANKOMAT?", + "subtitle": "Where is the nearest ATM?", + "description": "Asking for the location of an automated teller machine" + }, + "362": { + "title": "NA LEVO", + "subtitle": "To the left", + "description": "Indicating a direction" + }, + "363": { + "title": "NA DESNO", + "subtitle": "To the right", + "description": "Indicating a direction" + }, + "364": { + "title": "NARAVNO NAPREJ", + "subtitle": "Straight ahead", + "description": "Indicating a direction" + }, + "365": { + "title": "ŠE ENKRAT, PROSIM", + "subtitle": "One more time, please", + "description": "Asking for something to be repeated or done again" + } +} \ No newline at end of file diff --git a/of_the_day/word_of_the_day.json b/of_the_day/word_of_the_day.json new file mode 100644 index 00000000..2a13a750 --- /dev/null +++ b/of_the_day/word_of_the_day.json @@ -0,0 +1,1827 @@ +{ + "1": { + "title": "Abstruse", + "subtitle": "Difficult to understand; obscure", + "description": "The philosopher's work was filled with **abstruse** concepts that only a few scholars could grasp." + }, + "2": { + "title": "Cynosure", + "subtitle": "A person or thing that is the center of attention or admiration", + "description": "At the gala, the renowned artist was the **cynosure** of all eyes." + }, + "3": { + "title": "Desultory", + "subtitle": "Lacking a plan, purpose, or enthusiasm; casual", + "description": "His **desultory** efforts at studying meant he was ill-prepared for the exam." + }, + "4": { + "title": "Ebullient", + "subtitle": "Cheerful and full of energy", + "description": "Her **ebullient** personality was infectious, lifting everyone's spirits." + }, + "5": { + "title": "Farrago", + "subtitle": "A confused mixture", + "description": "The report was a **farrago** of unsubstantiated claims and unrelated facts." + }, + "6": { + "title": "Ignominious", + "subtitle": "Deserving or causing public disgrace or shame", + "description": "The team suffered an **ignominious** defeat, losing by a huge margin." + }, + "7": { + "title": "Kenophobia", + "subtitle": "An abnormal fear of voids or empty spaces", + "description": "His extreme discomfort in large, open rooms suggested a touch of **kenophobia**." + }, + "8": { + "title": "Lachrymose", + "subtitle": "Tearful or given to weeping", + "description": "The movie's ending was so tragic that it left the audience in a **lachrymose** state." + }, + "9": { + "title": "Miasma", + "subtitle": "A noxious or poisonous atmosphere; an oppressive or unpleasant atmosphere", + "description": "The old factory emitted a **miasma** of foul-smelling smoke." + }, + "10": { + "title": "Nugatory", + "subtitle": "Of no value or importance; useless or futile", + "description": "His arguments were ultimately **nugatory**, having no impact on the judge's decision." + }, + "11": { + "title": "Obstreperous", + "subtitle": "Noisy and difficult to control", + "description": "The teacher struggled to manage the **obstreperous** class during the field trip." + }, + "12": { + "title": "Panegyric", + "subtitle": "A public speech or published text in praise of someone or something", + "description": "The documentary was a glowing **panegyric** to the late civil rights leader." + }, + "13": { + "title": "Querulous", + "subtitle": "Complaining in a petulant or whining manner", + "description": "The elderly man was known for his **querulous** disposition, always finding fault." + }, + "14": { + "title": "Redolent", + "subtitle": "Strongly reminiscent or suggestive of something; fragrant or smelling strongly of something", + "description": "The old bookstore was **redolent** of aged paper and leather." + }, + "15": { + "title": "Sartorial", + "subtitle": "Relating to tailoring, clothes, or style of dress", + "description": "His impeccable **sartorial** choices always made a strong impression." + }, + "16": { + "title": "Tergiversate", + "subtitle": "Make conflicting or evasive statements; equivocate", + "description": "When questioned, the politician began to **tergiversate**, avoiding a direct answer." + }, + "17": { + "title": "Ubiquitous", + "subtitle": "Present, appearing, or found everywhere", + "description": "In the digital age, screen time has become an almost **ubiquitous** part of daily life." + }, + "18": { + "title": "Vituperative", + "subtitle": "Bitter and abusive", + "description": "The public debate quickly devolved into **vituperative** exchanges between the candidates." + }, + "19": { + "title": "Waggish", + "subtitle": "Humorous in a playful, mischievous, or facetious manner", + "description": "His **waggish** remarks often brought smiles to his colleagues' faces." + }, + "20": { + "title": "Xenodochial", + "subtitle": "Friendly to strangers (an archaic or rare word)", + "description": "The isolated community was surprisingly **xenodochial**, welcoming travelers with open arms." + }, + "21": { + "title": "Ylem", + "subtitle": "(in the Big Bang theory) the primordial matter of the universe from which all later matter was formed", + "description": "In the theory of the Big Bang, all matter originated from a singular **ylem**." + }, + "22": { + "title": "Zephyr", + "subtitle": "A soft, gentle breeze", + "description": "A gentle **zephyr** rustled the leaves, providing a welcome respite from the summer heat." + }, + "23": { + "title": "Anathema", + "subtitle": "Something or someone that one vehemently dislikes; a formal curse by a Pope or a council of the Church", + "description": "For environmentalists, deforestation is an **anathema**." + }, + "24": { + "title": "Brocade", + "subtitle": "A rich fabric, typically silk, woven with a raised pattern, typically with gold or silver thread", + "description": "The antique armchair was upholstered in a beautiful floral **brocade**." + }, + "25": { + "title": "Cacography", + "subtitle": "Bad handwriting or spelling", + "description": "The student's essay was almost illegible due to his atrocious **cacography**." + }, + "26": { + "title": "Demagoguery", + "subtitle": "An appeal to people's desires and prejudices rather than to their rational thought", + "description": "The politician's speech was dismissed as pure **demagoguery**, designed to incite fear." + }, + "27": { + "title": "Effulgent", + "subtitle": "Shining brightly; radiant", + "description": "The bride walked down the aisle, her face **effulgent** with joy." + }, + "28": { + "title": "Flummox", + "subtitle": "Perplex (someone) deeply; bewilder", + "description": "The complex instructions completely **flummoxed** him." + }, + "29": { + "title": "Garrulous", + "subtitle": "Excessively talkative, especially on trivial matters", + "description": "The **garrulous** old man told everyone his life story in the waiting room." + }, + "30": { + "title": "Hegemony", + "subtitle": "Leadership or dominance, especially by one country or social group over others", + "description": "The struggle for regional **hegemony** led to decades of conflict." + }, + "31": { + "title": "Inchoate", + "subtitle": "Just begun and so not fully formed or developed; rudimentary", + "description": "His ideas for the novel were still **inchoate**, a vague outline in his mind." + }, + "32": { + "title": "Jejune", + "subtitle": "Naive, simplistic, and superficial; dry and uninteresting", + "description": "The new intern's proposals were rather **jejune**, lacking real substance." + }, + "33": { + "title": "Kakistocracy", + "subtitle": "A system of government which is run by the worst, least qualified, or most unscrupulous citizens", + "description": "Critics argued that the current administration was a clear example of a **kakistocracy**." + }, + "34": { + "title": "Lassitude", + "subtitle": "A state of physical or mental weariness; lack of energy", + "description": "The summer heat brought on a feeling of overwhelming **lassitude**." + }, + "35": { + "title": "Mellifluous", + "subtitle": "Sweet or musical; pleasant to hear", + "description": "Her **mellifluous** voice was perfect for soothing restless children." + }, + "36": { + "title": "Nadir", + "subtitle": "The lowest point in the fortunes of a person or organization; the astronomical point opposite the zenith", + "description": "His career reached its **nadir** after the scandalous revelations." + }, + "37": { + "title": "Obfuscate", + "subtitle": "Render obscure, unclear, or unintelligible", + "description": "Some politicians deliberately **obfuscate** the truth to confuse voters." + }, + "38": { + "title": "Pecuniary", + "subtitle": "Relating to or consisting of money", + "description": "He faced significant **pecuniary** difficulties after losing his job." + }, + "39": { + "title": "Quisling", + "subtitle": "A traitor who collaborates with an enemy occupying force", + "description": "He was branded a **quisling** for cooperating with the invading army." + }, + "40": { + "title": "Recalcitrant", + "subtitle": "Having an obstinately uncooperative attitude toward authority or discipline", + "description": "The **recalcitrant** student refused to follow the teacher's instructions." + }, + "41": { + "title": "Serendipity", + "subtitle": "The occurrence and development of events by chance in a happy or beneficial way", + "description": "It was pure **serendipity** that she stumbled upon the rare book at a small shop." + }, + "42": { + "title": "Truculent", + "subtitle": "Eager or quick to argue or fight; aggressively defiant", + "description": "His **truculent** behavior made it difficult to resolve the conflict peacefully." + }, + "43": { + "title": "Unctuous", + "subtitle": "Excessively or ingratiatingly flattering; oily", + "description": "The salesman's **unctuous** compliments made her feel uneasy." + }, + "44": { + "title": "Verisimilitude", + "subtitle": "The appearance of being true or real", + "description": "The novel achieved remarkable **verisimilitude** in its depiction of 19th-century London." + }, + "45": { + "title": "Weltanschauung", + "subtitle": "A particular philosophy or view of life; a worldview", + "description": "His experiences shaped his unique **weltanschauung** on human nature." + }, + "46": { + "title": "Xenophobia", + "subtitle": "Dislike of or prejudice against people from other countries", + "description": "Education is crucial in combating the rise of **xenophobia**." + }, + "47": { + "title": "Yips", + "subtitle": "A state of nervous tension that affects an athlete's performance (especially in golf)", + "description": "The golfer suffered from the **yips** during the crucial final putt." + }, + "48": { + "title": "Zenith", + "subtitle": "The time at which something is most powerful or successful; the point in the sky directly above an observer", + "description": "At the **zenith** of his career, he was considered the greatest living artist." + }, + "49": { + "title": "Apotheosis", + "subtitle": "The highest point in the development of something; the elevation of someone to divine status", + "description": "Her performance was the **apotheosis** of acting, flawless and captivating." + }, + "50": { + "title": "Bane", + "subtitle": "A cause of great distress or annoyance", + "description": "Excessive bureaucracy was the **bane** of his existence in the government." + }, + "51": { + "title": "Cynosure", + "subtitle": "A person or thing that is the center of attention or admiration", + "description": "The new architectural masterpiece became the **cynosure** of the city." + }, + "52": { + "title": "Diaphanous", + "subtitle": "Light, delicate, and translucent", + "description": "She wore a **diaphanous** silk scarf that shimmered in the sunlight." + }, + "53": { + "title": "Esoteric", + "subtitle": "Intended for or likely to be understood by only a small number of people with a specialized knowledge or interest", + "description": "The ancient text was filled with **esoteric** symbols and references." + }, + "54": { + "title": "Fulsome", + "subtitle": "Complimentary or flattering to an excessive degree; of large size or quantity", + "description": "Her **fulsome** praise felt insincere and over-the-top." + }, + "55": { + "title": "Glabrous", + "subtitle": "(especially of a plant or animal) having no hairs or other covering; smooth", + "description": "The scientist observed the perfectly **glabrous** surface of the rare plant leaf." + }, + "56": { + "title": "Homily", + "subtitle": "A sermon; a tedious moralizing lecture or discourse", + "description": "The principal's assembly turned into a long **homily** about the importance of punctuality." + }, + "57": { + "title": "Ignoble", + "subtitle": "Not honorable in character or purpose", + "description": "His actions were driven by an **ignoble** desire for revenge." + }, + "58": { + "title": "Jocose", + "subtitle": "Playful or humorous", + "description": "His **jocose** comments always lightened the mood during tense meetings." + }, + "59": { + "title": "Kerfuffle", + "subtitle": "A commotion or fuss, especially one caused by conflicting views", + "description": "There was a bit of a **kerfuffle** when the band arrived late for the concert." + }, + "60": { + "title": "Lagniappe", + "subtitle": "Something given as a bonus or extra gift", + "description": "The street vendor gave him an extra pastry as a **lagniappe**." + }, + "61": { + "title": "Meticulous", + "subtitle": "Showing great attention to detail; very careful and precise", + "description": "The watchmaker was **meticulous** in assembling the tiny gears." + }, + "62": { + "title": "Nostrum", + "subtitle": "A medicine, especially one that is not considered effective, prepared by an unqualified person; a pet scheme or remedy, especially one for social or political ills", + "description": "The politician's proposed solution was dismissed as a mere **nostrum**." + }, + "63": { + "title": "Opprobrious", + "subtitle": "Expressing scorn or criticism", + "description": "He faced **opprobrious** remarks from the angry crowd." + }, + "64": { + "title": "Pellucid", + "subtitle": "Translucently clear; easily understood; limpid", + "description": "Her writing style was remarkably **pellucid**, making complex concepts easy to grasp." + }, + "65": { + "title": "Quiddity", + "subtitle": "The inherent nature or essence of someone or something", + "description": "He tried to understand the **quiddity** of human existence through philosophical inquiry." + }, + "66": { + "title": "Ratiocinate", + "subtitle": "Form judgments by a process of reasoning; reason", + "description": "He urged his colleagues to **ratiocinate** carefully before making a final decision." + }, + "67": { + "title": "Salubrious", + "subtitle": "Health-giving; healthy", + "description": "The mountain air was surprisingly **salubrious** after weeks in the polluted city." + }, + "68": { + "title": "Tendentious", + "subtitle": "Expressing or intending to promote a particular cause or point of view, especially a controversial one", + "description": "The article was criticized for its **tendentious** reporting, clearly biased." + }, + "69": { + "title": "Unctuous", + "subtitle": "Excessively or ingratiatingly flattering; oily", + "description": "The salesman's **unctuous** demeanor made customers suspicious." + }, + "70": { + "title": "Vatic", + "subtitle": "Describing or predicting what will happen in the future", + "description": "The ancient prophecy proved to be **vatic**, foretelling future events with accuracy." + }, + "71": { + "title": "Wizened", + "subtitle": "Shriveled or wrinkled with age", + "description": "The old woman's face was **wizened** from years of exposure to the sun." + }, + "72": { + "title": "Xerophthalmia", + "subtitle": "Abnormal dryness of the conjunctiva and cornea of the eye, which may result in damage to the eye if untreated. It is caused by vitamin A deficiency.", + "description": "In some developing countries, **xerophthalmia** is a significant public health concern due to dietary deficiencies." + }, + "73": { + "title": "Yeoman", + "subtitle": "A man holding and cultivating a small landed estate; a hardworking, diligent, or loyal worker", + "description": "He performed his duties with **yeoman** service, always reliable and dedicated." + }, + "74": { + "title": "Zugzwang", + "subtitle": "(in chess and other games) a situation in which a player is forced to make a disadvantageous move or one that worsens their position", + "description": "In the final moments of the chess game, he realized he was in **zugzwang**, with no good moves left." + }, + "75": { + "title": "Abscond", + "subtitle": "Leave hurriedly and secretly, typically to escape from custody or avoid arrest", + "description": "The accountant tried to **abscond** with the company's funds." + }, + "76": { + "title": "Bilk", + "subtitle": "Obtain or withhold money from (someone) by deceit or without justification; cheat or defraud", + "description": "The con artist attempted to **bilk** unsuspecting tourists out of their money." + }, + "77": { + "title": "Chicanery", + "subtitle": "The use of trickery to achieve a political, financial, or legal purpose", + "description": "The political campaign was rife with accusations of **chicanery**." + }, + "78": { + "title": "Disingenuous", + "subtitle": "Not candid or sincere, typically by pretending that one knows less about something than one really does", + "description": "His apologies sounded **disingenuous**, as if he didn't truly mean them." + }, + "79": { + "title": "Eschew", + "subtitle": "Deliberately avoid using; abstain from", + "description": "He decided to **eschew** social media for a month to focus on his well-being." + }, + "80": { + "title": "Foment", + "subtitle": "Instigate or stir up (an undesirable or violent sentiment or course of action)", + "description": "Their speeches were designed to **foment** discontent among the workers." + }, + "81": { + "title": "Gaffe", + "subtitle": "An unintentional act or remark causing embarrassment to its originator; a blunder", + "description": "The politician made a huge **gaffe** during the press conference." + }, + "82": { + "title": "Harridan", + "subtitle": "A strict, bossy, or belligerent old woman", + "description": "The children feared the stern **harridan** who lived next door." + }, + "83": { + "title": "Incontrovertible", + "subtitle": "Not able to be denied or disputed", + "description": "The evidence presented was **incontrovertible**, proving his innocence." + }, + "84": { + "title": "Jettison", + "subtitle": "Throw or drop (something) from an aircraft or ship; abandon or discard (someone or something that is no longer wanted)", + "description": "The company decided to **jettison** the failing product line." + }, + "85": { + "title": "Kismet", + "subtitle": "Destiny; fate", + "description": "They believed it was **kismet** that brought them together after all those years." + }, + "86": { + "title": "Lascivious", + "subtitle": "Feeling or revealing an overt and often offensive sexual desire", + "description": "His **lascivious** comments made the employees uncomfortable." + }, + "87": { + "title": "Misanthrope", + "subtitle": "A person who dislikes humankind and avoids human society", + "description": "The old hermit was a notorious **misanthrope**, shunning all social contact." + }, + "88": { + "title": "Nefarious", + "subtitle": "Wicked or criminal", + "description": "The supervillain plotted a **nefarious** scheme to take over the world." + }, + "89": { + "title": "Obeisance", + "subtitle": "Deferential respect; a bow or curtsy", + "description": "The subjects made deep **obeisance** to the king." + }, + "90": { + "title": "Pugnacious", + "subtitle": "Eager or quick to argue, quarrel, or fight", + "description": "The **pugnacious** boxer was always ready for a challenge." + }, + "91": { + "title": "Quixotic", + "subtitle": "Extremely idealistic; unrealistic and impractical", + "description": "His **quixotic** quest to eliminate poverty overnight was admirable but naive." + }, + "92": { + "title": "Recondite", + "subtitle": "Dealing with very profound, difficult, or abstruse subject matter", + "description": "The professor lectured on **recondite** theories that few in the audience understood." + }, + "93": { + "title": "Scurrilous", + "subtitle": "Making or spreading scandalous claims about someone with the intention of damaging their reputation", + "description": "The politician was a victim of a **scurrilous** smear campaign." + }, + "94": { + "title": "Temerity", + "subtitle": "Excessive confidence or boldness; audacity", + "description": "He had the **temerity** to interrupt the CEO during his presentation." + }, + "95": { + "title": "Unfathomable", + "subtitle": "Incapable of being fully explored or understood", + "description": "The depths of the universe remain largely **unfathomable** to human understanding." + }, + "96": { + "title": "Vicissitude", + "subtitle": "A change of circumstances or fortune, typically one that is unwelcome or unpleasant", + "description": "He faced many **vicissitudes** in his long and challenging career." + }, + "97": { + "title": "Wallow", + "subtitle": "Roll about or lie in mud or water; (of a person) indulge in an unrestrained way in (something that creates a pleasurable sensation)", + "description": "He spent the afternoon **wallowing** in self-pity after his defeat." + }, + "98": { + "title": "Xylography", + "subtitle": "The art of making woodcuts, especially for prints", + "description": "The ancient text was illustrated with intricate examples of **xylography**." + }, + "99": { + "title": "Yore", + "subtitle": "Of long ago or former times (used in nostalgic or archaic contexts)", + "description": "In days of **yore**, knights rode on horseback to rescue princesses." + }, + "100": { + "title": "Zestful", + "subtitle": "Full of zest; enthusiastic", + "description": "She approached every new challenge with **zestful** energy." + }, + "101": { + "title": "Acumen", + "subtitle": "The ability to make good judgments and quick decisions, typically in a particular domain", + "description": "Her business **acumen** was evident in her successful ventures." + }, + "102": { + "title": "Bombast", + "subtitle": "High-sounding language with little meaning, used to impress people", + "description": "The politician's speech was full of empty **bombast** and lacked substance." + }, + "103": { + "title": "Circumlocution", + "subtitle": "The use of many words where fewer would do, especially in a deliberate attempt to be vague or evasive", + "description": "His answer was full of **circumlocution**, avoiding a direct response to the question." + }, + "104": { + "title": "Disingenuous", + "subtitle": "Not candid or sincere, typically by pretending that one knows less about something than one really does", + "description": "Her innocent questions seemed **disingenuous** to those who knew her true intentions." + }, + "105": { + "title": "Efficacious", + "subtitle": "Producing a desired or intended result; effective", + "description": "The new medication proved to be highly **efficacious** in treating the illness." + }, + "106": { + "title": "Fecund", + "subtitle": "Producing or capable of producing an abundance of offspring or new growth; fertile", + "description": "The **fecund** imagination of the author produced a continuous stream of novels." + }, + "107": { + "title": "Glabrous", + "subtitle": "(especially of a plant or animal) having no hairs or other covering; smooth", + "description": "The newborn kitten had surprisingly **glabrous** skin." + }, + "108": { + "title": "Hapless", + "subtitle": "Unfortunate", + "description": "The **hapless** traveler missed his flight and lost his luggage on the same day." + }, + "109": { + "title": "Imbroglio", + "subtitle": "An extremely confused, complicated, or embarrassing situation", + "description": "The political scandal created an international **imbroglio**." + }, + "110": { + "title": "Jubilant", + "subtitle": "Feeling or expressing great happiness and triumph", + "description": "The fans were **jubilant** after their team won the championship in overtime." + }, + "111": { + "title": "Kitsch", + "subtitle": "Art, objects, or design considered to be in poor taste because of excessive garishness or sentimentality, but sometimes appreciated in an ironic or knowing way", + "description": "Her apartment was decorated with brightly colored **kitsch** from various tourist traps." + }, + "112": { + "title": "Laconic", + "subtitle": "Using very few words", + "description": "His **laconic** reply conveyed his disapproval without a single unnecessary word." + }, + "113": { + "title": "Malediction", + "subtitle": "A magical word or phrase uttered with the intention of bringing about evil or destruction; a curse", + "description": "The ancient text spoke of a powerful **malediction** placed upon the forbidden treasure." + }, + "114": { + "title": "Nadir", + "subtitle": "The lowest point in the fortunes of a person or organization", + "description": "His health reached its **nadir** before he began to show signs of recovery." + }, + "115": { + "title": "Obviate", + "subtitle": "Remove (a need or difficulty); avoid; prevent", + "description": "Taking preventative measures can often **obviate** the need for more drastic interventions later." + }, + "116": { + "title": "Paltry", + "subtitle": "Small or meager amount; trivial", + "description": "He was paid a **paltry** sum for his extensive work." + }, + "117": { + "title": "Quiescent", + "subtitle": "In a state or period of inactivity or dormancy", + "description": "The volcano has been **quiescent** for centuries, but geologists are monitoring it closely." + }, + "118": { + "title": "Rapacious", + "subtitle": "Aggressively greedy or grasping", + "description": "The **rapacious** corporation exploited the natural resources without regard for the environment." + }, + "119": { + "title": "Salient", + "subtitle": "Most noticeable or important", + "description": "The **salient** features of the new phone were its improved camera and longer battery life." + }, + "120": { + "title": "Tendentious", + "subtitle": "Expressing or intending to promote a particular cause or point of view, especially a controversial one", + "description": "The documentary was criticized for its **tendentious** portrayal of historical events." + }, + "121": { + "title": "Unfettered", + "subtitle": "Released from physical or intellectual restraints; unrestricted", + "description": "The artist found creative freedom once he was **unfettered** by commercial demands." + }, + "122": { + "title": "Vacillate", + "subtitle": "Alternate or waver between different opinions or actions; be indecisive", + "description": "He tended to **vacillate** between two options, unable to make a firm decision." + }, + "123": { + "title": "Wane", + "subtitle": "(of the moon) have a progressively smaller part of its visible surface illuminated, so that it appears to decrease in size; (of a state or feeling) decrease in vigor, power, or extent; become weaker", + "description": "Her enthusiasm for the project began to **wane** after several setbacks." + }, + "124": { + "title": "Xeriscape", + "subtitle": "A style of landscape design requiring minimal water", + "description": "In drought-prone regions, **xeriscape** gardens are becoming increasingly popular." + }, + "125": { + "title": "Yarn", + "subtitle": "Spun thread; a long or rambling story, especially one that is unlikely to be true", + "description": "The old sailor spun a captivating **yarn** about his adventures at sea." + }, + "126": { + "title": "Zealot", + "subtitle": "A person who is fanatical and uncompromising in pursuit of their religious, political, or other ideals", + "description": "The political **zealot** refused to consider any opposing viewpoints, sticking rigidly to his own." + }, + "127": { + "title": "Ameliorate", + "subtitle": "Make (something bad or unsatisfactory) better", + "description": "Efforts were made to **ameliorate** the living conditions of the refugees." + }, + "128": { + "title": "Bellicose", + "subtitle": "Demonstrating aggression and willingness to fight", + "description": "His **bellicose** rhetoric threatened to escalate the diplomatic crisis." + }, + "129": { + "title": "Concomitant", + "subtitle": "Naturally accompanying or associated", + "description": "Loss of appetite is a common **concomitant** of the flu." + }, + "130": { + "title": "Debilitate", + "subtitle": "Make (someone) weak and infirm", + "description": "The severe illness continued to **debilitate** the patient's strength." + }, + "131": { + "title": "Elicit", + "subtitle": "Evoke or draw out (a response, answer, or fact) from someone in reaction to one's own actions or questions", + "description": "The detective tried to **elicit** information from the reluctant witness." + }, + "132": { + "title": "Frivolous", + "subtitle": "Not having any serious purpose or value", + "description": "She considered his constant jokes to be **frivolous** and inappropriate for the serious meeting." + }, + "133": { + "title": "Gourmand", + "subtitle": "A person who enjoys eating and often eats too much", + "description": "As a true **gourmand**, he sought out the finest dining experiences around the world." + }, + "134": { + "title": "Harangue", + "subtitle": "A lengthy and aggressive speech", + "description": "The coach delivered a furious **harangue** to his team after their poor performance." + }, + "135": { + "title": "Indolent", + "subtitle": "Wanting to avoid activity or exertion; lazy", + "description": "The cat lay in an **indolent** sprawl, enjoying the afternoon sun." + }, + "136": { + "title": "Juxtaposition", + "subtitle": "The fact of two things being seen or placed close together with contrasting effect", + "description": "The artist used the **juxtaposition** of vibrant colors and dark shadows to create a dramatic effect." + }, + "137": { + "title": "Kowtow", + "subtitle": "Act in an excessively subservient manner; kneel and touch the ground with the forehead in worship or submission", + "description": "He refused to **kowtow** to the demands of his tyrannical boss." + }, + "138": { + "title": "Languid", + "subtitle": "Having a disinclination for physical exertion or effort; slow and relaxed", + "description": "The hot, humid weather made everyone feel **languid** and sluggish." + }, + "139": { + "title": "Maudlin", + "subtitle": "Self-pityingly or tearfully sentimental, often through drunkenness", + "description": "After a few drinks, he became **maudlin** and started reminiscing tearfully about his lost youth." + }, + "140": { + "title": "Noxious", + "subtitle": "Harmful, poisonous, or very unpleasant", + "description": "The factory released **noxious** fumes into the atmosphere, causing health concerns." + }, + "141": { + "title": "Ostracize", + "subtitle": "Exclude (someone) from a society or group", + "description": "The other children would **ostracize** anyone who didn't conform to their strict rules." + }, + "142": { + "title": "Panacea", + "subtitle": "A solution or remedy for all difficulties or diseases", + "description": "Many people seek a quick **panacea** for all their problems, but real solutions are often complex." + }, + "143": { + "title": "Quagmire", + "subtitle": "A soft boggy area of land that gives way underfoot; an awkward, complex, or hazardous situation", + "description": "The company found itself in a financial **quagmire** after a series of bad investments." + }, + "144": { + "title": "Repudiate", + "subtitle": "Refuse to accept or be associated with", + "description": "He publicly **repudiated** the accusations made against him, declaring them false." + }, + "145": { + "title": "Sardonic", + "subtitle": "Grimly mocking or cynical", + "description": "His **sardonic** wit often made people uncomfortable, even when they laughed." + }, + "146": { + "title": "Tenacious", + "subtitle": "Tending to keep a firm hold of something; clinging or adhering closely", + "description": "The climber had a **tenacious** grip on the rock face, refusing to let go." + }, + "147": { + "title": "Undulate", + "subtitle": "Move with a smooth up-and-down motion", + "description": "The fields of wheat **undulated** gently in the summer breeze." + }, + "148": { + "title": "Venerate", + "subtitle": "Regard with great respect; revere", + "description": "Many cultures continue to **venerate** their ancestors and ancient traditions." + }, + "149": { + "title": "Wanton", + "subtitle": "(of a cruel or violent action) deliberate and unprovoked; sexually unrestrained", + "description": "The vandals caused **wanton** destruction to the public park, defacing statues and breaking benches." + }, + "150": { + "title": "Xerophyte", + "subtitle": "A plant adapted to live in dry conditions", + "description": "Cacti are prime examples of **xerophytes**, thriving in arid desert environments." + }, + "151": { + "title": "Yoke", + "subtitle": "A wooden crosspiece that is fastened over the necks of two animals and attached to a plow or cart; a burden or something that oppresses", + "description": "The country struggled to cast off the **yoke** of oppression after decades of foreign rule." + }, + "152": { + "title": "Zeitgeist", + "subtitle": "The defining spirit or mood of a particular period of history as shown by the ideas and beliefs of the time", + "description": "The emergence of new technologies deeply influenced the **zeitgeist** of the late 20th century." + }, + "153": { + "title": "Absolve", + "subtitle": "Declare (someone) free from guilt, obligation, or punishment", + "description": "The jury voted to **absolve** him of all charges due to insufficient evidence." + }, + "154": { + "title": "Bombastic", + "subtitle": "High-sounding but with little meaning; inflated", + "description": "The politician's speech was full of **bombastic** rhetoric but offered no concrete solutions." + }, + "155": { + "title": "Cacophony", + "subtitle": "A harsh, discordant mixture of sounds", + "description": "The city street was a **cacophony** of honking horns and shouting vendors." + }, + "156": { + "title": "Decry", + "subtitle": "Publicly denounce", + "description": "Environmental groups **decried** the government's decision to expand drilling operations." + }, + "157": { + "title": "Enervate", + "subtitle": "Cause (someone) to feel drained of energy or vitality; weaken", + "description": "The long, hot journey had a truly **enervating** effect on the travelers." + }, + "158": { + "title": "Fervent", + "subtitle": "Having or displaying a passionate intensity", + "description": "She was a **fervent** advocate for animal rights, dedicating her life to the cause." + }, + "159": { + "title": "Glib", + "subtitle": "(of words or the person speaking them) fluent and voluble but insincere and shallow", + "description": "He offered a **glib** excuse that no one found believable." + }, + "160": { + "title": "Haughty", + "subtitle": "Arrogantly superior and disdainful", + "description": "The fashion designer's **haughty** demeanor made her seem unapproachable." + }, + "161": { + "title": "Impecunious", + "subtitle": "Having little or no money", + "description": "Despite his talent, the artist remained **impecunious** throughout his life." + }, + "162": { + "title": "Jocund", + "subtitle": "Cheerful and lighthearted", + "description": "The travelers enjoyed a **jocund** evening of singing and storytelling around the campfire." + }, + "163": { + "title": "Kismet", + "subtitle": "Destiny; fate", + "description": "They believed it was **kismet** that their paths crossed at such an unexpected moment." + }, + "164": { + "title": "Languor", + "subtitle": "The state or feeling of tiredness or inertia", + "description": "A feeling of **languor** settled over the city during the sweltering heatwave." + }, + "165": { + "title": "Mirth", + "subtitle": "Amusement, especially as expressed in laughter", + "description": "The children's faces were full of **mirth** as they played games in the park." + }, + "166": { + "title": "Nepotism", + "subtitle": "The practice among those with power or influence of favoring relatives or friends, especially by giving them jobs", + "description": "The company was accused of **nepotism** after several family members were hired for key positions." + }, + "167": { + "title": "Opaque", + "subtitle": "Not able to be seen through; not transparent", + "description": "The instructions were so **opaque** that no one could understand what was expected of them." + }, + "168": { + "title": "Parsimonious", + "subtitle": "Unwilling to spend money or use resources; stingy or frugal", + "description": "He was so **parsimonious** that he rarely bought anything new, even when he could afford it." + }, + "169": { + "title": "Querulous", + "subtitle": "Complaining in a petulant or whining manner", + "description": "The baby's **querulous** cries filled the quiet room." + }, + "170": { + "title": "Rancid", + "subtitle": "(of foods containing fat or oil) smelling or tasting unpleasant as a result of being stale", + "description": "The butter had gone **rancid** and was inedible." + }, + "171": { + "title": "Sanguine", + "subtitle": "Optimistic or positive, especially in an apparently difficult situation", + "description": "Despite the mounting challenges, she remained **sanguine** about the project's success." + }, + "172": { + "title": "Tacit", + "subtitle": "Understood or implied without being stated", + "description": "There was a **tacit** agreement between them not to discuss the sensitive topic." + }, + "173": { + "title": "Unwitting", + "subtitle": "Not aware of the full facts; unintentional", + "description": "She became an **unwitting** accomplice to the crime, unaware of the illegal activities." + }, + "174": { + "title": "Vituperate", + "subtitle": "Blame or insult (someone) in strong or violent language", + "description": "He began to **vituperate** his opponent with harsh and abusive language." + }, + "175": { + "title": "Wry", + "subtitle": "Using or expressing dry, especially mocking, humor", + "description": "He gave a **wry** smile, acknowledging the irony of the situation." + }, + "176": { + "title": "Xerox", + "subtitle": "A copy made using a xerographic copier; to make a xerographic copy of", + "description": "She needed to **Xerox** the documents before the meeting." + }, + "177": { + "title": "Yuppie", + "subtitle": "A young urban professional, typically working in a city and with a high disposable income", + "description": "The new apartment complex was largely occupied by **yuppies** drawn to the vibrant city life." + }, + "178": { + "title": "Zodiacal", + "subtitle": "Relating to the zodiac", + "description": "He studied the **zodiacal** charts to understand his astrological predispositions." + }, + "179": { + "title": "Aberrant", + "subtitle": "Departing from an accepted standard; diverging from the normal type", + "description": "The scientist observed an **aberrant** cell growth that warranted further investigation." + }, + "180": { + "title": "Bilk", + "subtitle": "Obtain or withhold money from (someone) by deceit or without justification; cheat or defraud", + "description": "The con artist managed to **bilk** several investors before being caught." + }, + "181": { + "title": "Conjecture", + "subtitle": "An opinion or conclusion formed on the basis of incomplete information", + "description": "The police report was based largely on **conjecture** rather than concrete evidence." + }, + "182": { + "title": "Diffident", + "subtitle": "Modest or shy because of a lack of self-confidence", + "description": "She was **diffident** about expressing her opinions in the group discussion." + }, + "183": { + "title": "Enigmatic", + "subtitle": "Difficult to interpret or understand; mysterious", + "description": "The artist's painting had an **enigmatic** quality that fascinated viewers." + }, + "184": { + "title": "Flamboyant", + "subtitle": "Tending to attract attention because of their exuberance, confidence, and stylishness", + "description": "He was known for his **flamboyant** fashion sense and dramatic stage presence." + }, + "185": { + "title": "Gratuitous", + "subtitle": "Uncalled for; lacking good reason; unwarranted", + "description": "The movie contained a lot of **gratuitous** violence that added nothing to the plot." + }, + "186": { + "title": "Hyperbole", + "subtitle": "Exaggerated statements or claims not meant to be taken literally", + "description": "His description of the party as 'the most epic event ever' was pure **hyperbole**." + }, + "187": { + "title": "Idyllic", + "subtitle": "Extremely happy, peaceful, or picturesque", + "description": "They spent an **idyllic** summer vacation in a charming countryside cottage." + }, + "188": { + "title": "Jejune", + "subtitle": "Naive, simplistic, and superficial; dry and uninteresting", + "description": "His arguments were rather **jejune** and failed to address the complexity of the issue." + }, + "189": { + "title": "Knell", + "subtitle": "The sound of a bell, especially when rung solemnly for a death or funeral; the end or downfall of something", + "description": "The announcement of the factory's closure sounded the death **knell** for the small town's economy." + }, + "190": { + "title": "Lamentable", + "subtitle": "(of circumstances or conditions) deplorable or regrettable", + "description": "The living conditions in the refugee camp were truly **lamentable**." + }, + "191": { + "title": "Mendacious", + "subtitle": "Not telling the truth; lying", + "description": "The politician was accused of making **mendacious** statements during the campaign." + }, + "192": { + "title": "Noxious", + "subtitle": "Harmful, poisonous, or very unpleasant", + "description": "The factory released **noxious** chemicals into the river, causing environmental damage." + }, + "193": { + "title": "Ostracism", + "subtitle": "Exclusion from a society or group", + "description": "She faced social **ostracism** after her controversial opinions became known." + }, + "194": { + "title": "Parsimony", + "subtitle": "Extreme unwillingness to spend money or use resources", + "description": "His extreme **parsimony** meant he rarely enjoyed any luxuries." + }, + "195": { + "title": "Quirk", + "subtitle": "A peculiar behavioral habit", + "description": "One of his many **quirks** was his habit of talking to himself while working." + }, + "196": { + "title": "Rampant", + "subtitle": "(especially of something unwelcome or unpleasant) flourishing or spreading unchecked", + "description": "Corruption was **rampant** throughout the government at that time." + }, + "197": { + "title": "Scofflaw", + "subtitle": "A person who flouts the law, especially by failing to comply with a law that is difficult to enforce effectively", + "description": "Parking regulations were constantly ignored by local **scofflaws**." + }, + "198": { + "title": "Tenuous", + "subtitle": "Very weak or slight", + "description": "The connection between the two events was rather **tenuous**, based on speculation." + }, + "199": { + "title": "Unkempt", + "subtitle": "Having an untidy or disheveled appearance", + "description": "He arrived at the interview looking surprisingly **unkempt**." + }, + "200": { + "title": "Verdant", + "subtitle": "(of countryside) green with grass or other rich vegetation", + "description": "The hills were lush and **verdant** after the heavy spring rains." + }, + "201": { + "title": "Wistful", + "subtitle": "Having or showing a feeling of vague or regretful longing", + "description": "He looked out at the old playground with a **wistful** expression, remembering his childhood." + }, + "202": { + "title": "Xenial", + "subtitle": "Relating to or denoting the hospitality shown to guests or strangers", + "description": "The locals were known for their **xenial** nature, always welcoming visitors warmly." + }, + "203": { + "title": "Yearn", + "subtitle": "Have an intense longing for something", + "description": "She began to **yearn** for a simpler life, away from the city's hustle and bustle." + }, + "204": { + "title": "Zestfully", + "subtitle": "With great enthusiasm and energy", + "description": "He tackled the new project **zestfully**, eager to prove himself." + }, + "205": { + "title": "Abrogate", + "subtitle": "Repeal or do away with (a law, right, or formal agreement)", + "description": "The parliament voted to **abrogate** the outdated law." + }, + "206": { + "title": "Beguile", + "subtitle": "Charm or enchant (someone), sometimes in a deceptive way", + "description": "He was **beguiled** by her beauty and charming personality, completely falling under her spell." + }, + "207": { + "title": "Chasm", + "subtitle": "A deep fissure in the earth's surface; a profound difference between people, viewpoints, feelings, etc.", + "description": "There was a vast **chasm** between their political ideologies, making compromise impossible." + }, + "208": { + "title": "Dilettante", + "subtitle": "A person who cultivates an area of interest, such as the arts, without real commitment or knowledge", + "description": "He was a mere **dilettante** in the world of classical music, lacking deep understanding or skill." + }, + "209": { + "title": "Emaciated", + "subtitle": "Abnormally thin or weak, especially because of illness or lack of food", + "description": "The rescued stray dog was severely **emaciated**, just skin and bones." + }, + "210": { + "title": "Fissure", + "subtitle": "A long, narrow opening or crack in something, especially a rock or earth", + "description": "A deep **fissure** appeared in the road after the recent earthquake." + }, + "211": { + "title": "Goad", + "subtitle": "Provoke or annoy (someone) to stimulate some action or reaction", + "description": "He tried to **goad** her into arguing, but she refused to take the bait." + }, + "212": { + "title": "Halcyon", + "subtitle": "Denoting a period of time in the past that was idyllically happy and peaceful", + "description": "She often reminisced about the **halcyon** days of her youth, carefree and joyful." + }, + "213": { + "title": "Inexorable", + "subtitle": "Impossible to stop or prevent", + "description": "The **inexorable** march of technological progress continues unabated." + }, + "214": { + "title": "Jejune", + "subtitle": "Naive, simplistic, and superficial; dry and uninteresting", + "description": "His theories were so **jejune** that they were quickly dismissed by the scientific community." + }, + "215": { + "title": "Kitsch", + "subtitle": "Art, objects, or design considered to be in poor taste because of excessive garishness or sentimentality, but sometimes appreciated in an ironic or knowing way", + "description": "The souvenir shop was full of **kitsch** items, brightly colored and overly sentimental." + }, + "216": { + "title": "Languid", + "subtitle": "Having a disinclination for physical exertion or effort; slow and relaxed", + "description": "The warm, lazy afternoon made him feel wonderfully **languid**." + }, + "217": { + "title": "Maudlin", + "subtitle": "Self-pityingly or tearfully sentimental, often through drunkenness", + "description": "The old movie became rather **maudlin** towards the end, with excessive sentimental scenes." + }, + "218": { + "title": "Niche", + "subtitle": "A comfortable or suitable position in life or employment; a specialized segment of the market for a particular kind of product or service", + "description": "She found her perfect **niche** working with rare books." + }, + "219": { + "title": "Opulent", + "subtitle": "Rich and luxurious or lavish", + "description": "The palace was decorated with **opulent** furnishings and shimmering gold accents." + }, + "220": { + "title": "Piquant", + "subtitle": "Having a pleasantly sharp taste or appetizing flavor; pleasantly stimulating or exciting to the mind", + "description": "The lemon zest added a delightful **piquant** note to the dessert." + }, + "221": { + "title": "Quixotic", + "subtitle": "Extremely idealistic; unrealistic and impractical", + "description": "His **quixotic** attempts to solve all the world's problems seemed destined to fail." + }, + "222": { + "title": "Rapacious", + "subtitle": "Aggressively greedy or grasping", + "description": "The **rapacious** landlord continually raised the rent without justification." + }, + "223": { + "title": "Salubrious", + "subtitle": "Health-giving; healthy", + "description": "The clean mountain air provided a **salubrious** environment for recovery." + }, + "224": { + "title": "Tractable", + "subtitle": "Easy to control or influence", + "description": "The previously unruly students became surprisingly **tractable** under the new teacher's guidance." + }, + "225": { + "title": "Unctuous", + "subtitle": "Excessively or ingratiatingly flattering; oily", + "description": "The politician's **unctuous** compliments were clearly insincere and aimed at gaining votes." + }, + "226": { + "title": "Vignette", + "subtitle": "A brief evocative description, account, or episode", + "description": "The author used short, poignant **vignettes** to tell the story of a lifetime." + }, + "227": { + "title": "Wane", + "subtitle": "(of a state or feeling) decrease in vigor, power, or extent; become weaker", + "description": "The public's interest in the scandal began to **wane** after a few weeks." + }, + "228": { + "title": "Xenophobia", + "subtitle": "Dislike of or prejudice against people from other countries", + "description": "The rise of nationalism often correlates with an increase in **xenophobia**." + }, + "229": { + "title": "Yodel", + "subtitle": "A form of singing or calling in which the voice rapidly changes between the normal chest voice and the high falsetto", + "description": "The sound of a lone **yodel** echoed through the Swiss Alps." + }, + "230": { + "title": "Zillion", + "subtitle": "An indefinitely large number", + "description": "He claimed he had a **zillion** things to do before the deadline." + }, + "231": { + "title": "Ameliorate", + "subtitle": "Make (something bad or unsatisfactory) better", + "description": "The new policies aim to **ameliorate** the economic hardship faced by many families." + }, + "232": { + "title": "Brocade", + "subtitle": "A rich fabric, typically silk, woven with a raised pattern, typically with gold or silver thread", + "description": "The theatre curtains were made of heavy, crimson **brocade**." + }, + "233": { + "title": "Chicanery", + "subtitle": "The use of trickery to achieve a political, financial, or legal purpose", + "description": "The trial revealed years of financial **chicanery** by the company's executives." + }, + "234": { + "title": "Disingenuous", + "subtitle": "Not candid or sincere, typically by pretending that one knows less about something than one really does", + "description": "His feigned ignorance was so **disingenuous** it was almost insulting." + }, + "235": { + "title": "Eschew", + "subtitle": "Deliberately avoid using; abstain from", + "description": "True minimalists strive to **eschew** all unnecessary possessions." + }, + "236": { + "title": "Foment", + "subtitle": "Instigate or stir up (an undesirable or violent sentiment or course of action)", + "description": "The agitators sought to **foment** unrest among the striking workers." + }, + "237": { + "title": "Gaffe", + "subtitle": "An unintentional act or remark causing embarrassment to its originator; a blunder", + "description": "The diplomat's cultural **gaffe** caused an international incident." + }, + "238": { + "title": "Harbinger", + "subtitle": "A person or thing that announces or signals the approach of another", + "description": "The unusually warm weather was a **harbinger** of an early spring." + }, + "239": { + "title": "Imperturbable", + "subtitle": "Unable to be upset or excited; unflustered", + "description": "Despite the chaos around him, the pilot remained remarkably **imperturbable**." + }, + "240": { + "title": "Jargon", + "subtitle": "Special words or expressions used by a particular profession or group and difficult for others to understand", + "description": "The medical report was filled with technical **jargon** that was incomprehensible to the average person." + }, + "241": { + "title": "Kismet", + "subtitle": "Destiny; fate", + "description": "She felt it was pure **kismet** that they met on that particular day." + }, + "242": { + "title": "Languor", + "subtitle": "The state or feeling of tiredness or inertia", + "description": "A sense of peaceful **languor** enveloped them as they rested by the lake." + }, + "243": { + "title": "Mirthful", + "subtitle": "Full of mirth; merry or amusing", + "description": "The children's **mirthful** laughter echoed through the house." + }, + "244": { + "title": "Nepotism", + "subtitle": "The practice among those with power or influence of favoring relatives or friends, especially by giving them jobs", + "description": "Accusations of **nepotism** plagued the new administration, as several family members were given high-ranking positions." + }, + "245": { + "title": "Opportune", + "subtitle": "Well-chosen or particularly favorable or appropriate", + "description": "The rain came at an **opportune** moment, saving the wilting crops." + }, + "246": { + "title": "Perfunctory", + "subtitle": "(of an action or gesture) carried out with a minimum of effort or reflection", + "description": "He gave a **perfunctory** nod of greeting, clearly not interested in conversation." + }, + "247": { + "title": "Quorum", + "subtitle": "The minimum number of members of an assembly or society that must be present at any of its meetings to make the proceedings of that meeting valid", + "description": "The meeting couldn't proceed until a **quorum** of members was present." + }, + "248": { + "title": "Redolent", + "subtitle": "Strongly reminiscent or suggestive of something", + "description": "The old house was **redolent** of childhood memories, filled with familiar scents." + }, + "249": { + "title": "Scurrilous", + "subtitle": "Making or spreading scandalous claims about someone with the intention of damaging their reputation", + "description": "The tabloids published a **scurrilous** article, filled with false accusations." + }, + "250": { + "title": "Transitory", + "subtitle": "Not permanent or lasting; ephemeral", + "description": "Life is often described as a **transitory** journey, full of fleeting moments." + }, + "251": { + "title": "Unfathomable", + "subtitle": "Incapable of being fully explored or understood", + "description": "The depths of the human mind remain largely **unfathomable**." + }, + "252": { + "title": "Vitriolic", + "subtitle": "Full of bitter verbal abuse or malice", + "description": "She launched a **vitriolic** attack against her former boss, fueled by years of resentment." + }, + "253": { + "title": "Wily", + "subtitle": "Skilled at gaining an advantage, especially deceitfully", + "description": "The **wily** fox consistently outsmarted the hunters." + }, + "254": { + "title": "Xenial", + "subtitle": "Relating to or denoting the hospitality shown to guests or strangers", + "description": "The villagers were renowned for their **xenial** customs, always offering food and shelter to travelers." + }, + "255": { + "title": "Yearning", + "subtitle": "A feeling of intense longing for something", + "description": "He felt a deep **yearning** for adventure and exploration." + }, + "256": { + "title": "Zygote", + "subtitle": "A diploid cell resulting from the fusion of two haploid gametes; a fertilized ovum", + "description": "The development of an organism begins with a single **zygote**." + }, + "257": { + "title": "Arcane", + "subtitle": "Understood by few; mysterious or secret", + "description": "The old magician possessed **arcane** knowledge passed down through generations." + }, + "258": { + "title": "Banal", + "subtitle": "So lacking in originality as to be obvious and boring", + "description": "His speech was full of **banal** clichés, offering nothing new or insightful." + }, + "259": { + "title": "Cacography", + "subtitle": "Bad handwriting or spelling", + "description": "The ancient manuscript was difficult to decipher due to its **cacography**." + }, + "260": { + "title": "Derelict", + "subtitle": "In a very poor condition as a result of disuse and neglect; a person without a home, job, or property", + "description": "The abandoned building stood as a **derelict** reminder of better times." + }, + "261": { + "title": "Ebullience", + "subtitle": "The quality of being cheerful and full of energy", + "description": "Her natural **ebullience** made her a popular leader, inspiring everyone around her." + }, + "262": { + "title": "Farrago", + "subtitle": "A confused mixture", + "description": "The news report was a **farrago** of conflicting statements and speculation." + }, + "263": { + "title": "Glib", + "subtitle": "(of words or the person speaking them) fluent and voluble but insincere and shallow", + "description": "He had a **glib** answer for every difficult question, but they lacked sincerity." + }, + "264": { + "title": "Harangue", + "subtitle": "A lengthy and aggressive speech", + "description": "The angry crowd listened intently to the speaker's fiery **harangue**." + }, + "265": { + "title": "Impute", + "subtitle": "Attribute or ascribe (something, especially a fault) to someone", + "description": "He tried to **impute** the blame to his colleague, despite his own involvement." + }, + "266": { + "title": "Jejune", + "subtitle": "Naive, simplistic, and superficial; dry and uninteresting", + "description": "The student's essay was filled with **jejune** observations and lacked critical analysis." + }, + "267": { + "title": "Kudos", + "subtitle": "Praise and honor received for an achievement", + "description": "She received well-deserved **kudos** for her groundbreaking research." + }, + "268": { + "title": "Lachrymose", + "subtitle": "Tearful or given to weeping", + "description": "The farewell ceremony was a surprisingly **lachrymose** affair for everyone involved." + }, + "269": { + "title": "Miasma", + "subtitle": "A noxious or poisonous atmosphere; an oppressive or unpleasant atmosphere", + "description": "The old factory emitted a **miasma** of chemicals that polluted the air." + }, + "270": { + "title": "Nugatory", + "subtitle": "Of no value or importance; useless or futile", + "description": "His efforts to influence the decision were ultimately **nugatory**." + }, + "271": { + "title": "Obstreperous", + "subtitle": "Noisy and difficult to control", + "description": "The **obstreperous** children refused to settle down for their nap." + }, + "272": { + "title": "Panegyric", + "subtitle": "A public speech or published text in praise of someone or something", + "description": "The celebratory article was a beautiful **panegyric** to the retiring CEO." + }, + "273": { + "title": "Quisling", + "subtitle": "A traitor who collaborates with an enemy occupying force", + "description": "He was denounced as a **quisling** for his betrayal of the resistance movement." + }, + "274": { + "title": "Recalcitrant", + "subtitle": "Having an obstinately uncooperative attitude toward authority or discipline", + "description": "The **recalcitrant** donkey refused to move, despite all coaxing." + }, + "275": { + "title": "Sartorial", + "subtitle": "Relating to tailoring, clothes, or style of dress", + "description": "His **sartorial** elegance was always admired at formal events." + }, + "276": { + "title": "Tergiversate", + "subtitle": "Make conflicting or evasive statements; equivocate", + "description": "The witness continued to **tergiversate**, making it difficult for the jury to believe him." + }, + "277": { + "title": "Ubiquitous", + "subtitle": "Present, appearing, or found everywhere", + "description": "Plastic pollution is becoming increasingly **ubiquitous** in our oceans." + }, + "278": { + "title": "Vituperative", + "subtitle": "Bitter and abusive", + "description": "The online comments section was filled with **vituperative** attacks." + }, + "279": { + "title": "Waggish", + "subtitle": "Humorous in a playful, mischievous, or facetious manner", + "description": "His **waggish** pranks always caused laughter, though sometimes a little annoyance." + }, + "280": { + "title": "Xanthic", + "subtitle": "Yellow or yellowish", + "description": "The artist used **xanthic** pigments to capture the warmth of the summer sun." + }, + "281": { + "title": "Yin-yang", + "subtitle": "(in Chinese philosophy) two complementary principles, one feminine, dark, and negative (yin) and one masculine, bright, and positive (yang), whose interaction influences the destinies of creatures and things", + "description": "The concept of **yin-yang** illustrates the balance of opposing forces in the universe." + }, + "282": { + "title": "Zugzwang", + "subtitle": "(in chess and other games) a situation in which a player is forced to make a disadvantageous move or one that worsens their position", + "description": "He felt trapped in a strategic **zugzwang** during the negotiation, with no favorable options." + }, + "283": { + "title": "Abstemious", + "subtitle": "Not self-indulgent, especially when eating and drinking", + "description": "The monk lived an **abstemious** life, avoiding all luxuries." + }, + "284": { + "title": "Bombast", + "subtitle": "High-sounding language with little meaning, used to impress people", + "description": "His speech was more **bombast** than substance, filled with empty promises." + }, + "285": { + "title": "Cynosure", + "subtitle": "A person or thing that is the center of attention or admiration", + "description": "The glittering diamond necklace became the **cynosure** of the entire exhibition." + }, + "286": { + "title": "Diatribe", + "subtitle": "A forceful and bitter verbal attack against someone or something", + "description": "The critic launched into a furious **diatribe** against the director's latest film." + }, + "287": { + "title": "Effulgent", + "subtitle": "Shining brightly; radiant", + "description": "The morning sun was **effulgent**, bathing the landscape in golden light." + }, + "288": { + "title": "Fulsome", + "subtitle": "Complimentary or flattering to an excessive degree; of large size or quantity", + "description": "His **fulsome** praise for the mediocre performance seemed insincere." + }, + "289": { + "title": "Gourmand", + "subtitle": "A person who enjoys eating and often eats too much", + "description": "The food festival was a paradise for every true **gourmand**." + }, + "290": { + "title": "Hegemony", + "subtitle": "Leadership or dominance, especially by one country or social group over others", + "description": "The emerging nation challenged the established **hegemony** in global trade." + }, + "291": { + "title": "Inchoate", + "subtitle": "Just begun and so not fully formed or developed; rudimentary", + "description": "The artist's early sketches were still **inchoate**, hinting at future masterpieces." + }, + "292": { + "title": "Jejune", + "subtitle": "Naive, simplistic, and superficial; dry and uninteresting", + "description": "The politician's answers to complex economic questions were surprisingly **jejune**." + }, + "293": { + "title": "Kakistocracy", + "subtitle": "A system of government which is run by the worst, least qualified, or most unscrupulous citizens", + "description": "Some citizens feared their nation was descending into a **kakistocracy**." + }, + "294": { + "title": "Lassitude", + "subtitle": "A state of physical or mental weariness; lack of energy", + "description": "After the long hike, a profound sense of **lassitude** overcame them." + }, + "295": { + "title": "Mellifluous", + "subtitle": "Sweet or musical; pleasant to hear", + "description": "The speaker's **mellifluous** voice captivated the entire audience." + }, + "296": { + "title": "Nadir", + "subtitle": "The lowest point in the fortunes of a person or organization", + "description": "His business reached its **nadir** during the economic recession." + }, + "297": { + "title": "Obfuscate", + "subtitle": "Render obscure, unclear, or unintelligible", + "description": "He tried to **obfuscate** the details of the financial transaction to avoid scrutiny." + }, + "298": { + "title": "Pecuniary", + "subtitle": "Relating to or consisting of money", + "description": "The divorce settlement involved complex **pecuniary** arrangements." + }, + "299": { + "title": "Quisling", + "subtitle": "A traitor who collaborates with an enemy occupying force", + "description": "History often remembers **quislings** with scorn and contempt." + }, + "300": { + "title": "Recalcitrant", + "subtitle": "Having an obstinately uncooperative attitude toward authority or discipline", + "description": "The **recalcitrant** teenagers refused to follow the school rules." + }, + "301": { + "title": "Serendipity", + "subtitle": "The occurrence and development of events by chance in a happy or beneficial way", + "description": "Their meeting was a pure act of **serendipity**, leading to a lifelong friendship." + }, + "302": { + "title": "Truculent", + "subtitle": "Eager or quick to argue or fight; aggressively defiant", + "description": "His **truculent** nature often led him into unnecessary confrontations." + }, + "303": { + "title": "Unctuous", + "subtitle": "Excessively or ingratiatingly flattering; oily", + "description": "The salesperson's **unctuous** compliments did not convince her to buy the expensive car." + }, + "304": { + "title": "Verisimilitude", + "subtitle": "The appearance of being true or real", + "description": "The film achieved remarkable **verisimilitude** in its depiction of wartime experiences." + }, + "305": { + "title": "Weltanschauung", + "subtitle": "A particular philosophy or view of life; a worldview", + "description": "His travels significantly broadened his **weltanschauung**." + }, + "306": { + "title": "Xenial", + "subtitle": "Relating to or denoting the hospitality shown to guests or strangers", + "description": "The local community was known for its **xenial** customs, always making visitors feel at home." + }, + "307": { + "title": "Ylem", + "subtitle": "(in the Big Bang theory) the primordial matter of the universe from which all later matter was formed", + "description": "Cosmologists study the properties of the early universe, theorizing about the initial **ylem**." + }, + "308": { + "title": "Zenith", + "subtitle": "The time at which something is most powerful or successful", + "description": "The company reached its financial **zenith** last year." + }, + "309": { + "title": "Abstemious", + "subtitle": "Not self-indulgent, especially when eating and drinking", + "description": "He led an **abstemious** lifestyle, preferring simplicity over excess." + }, + "310": { + "title": "Bespoke", + "subtitle": "Made for a particular customer or user", + "description": "He wore a beautifully tailored **bespoke** suit to the wedding." + }, + "311": { + "title": "Capricious", + "subtitle": "Given to sudden and unaccountable changes of mood or behavior", + "description": "Her **capricious** decisions often surprised her colleagues and left them scrambling." + }, + "312": { + "title": "Delineate", + "subtitle": "Describe or portray (something) precisely", + "description": "The artist meticulously **delineated** every detail of the landscape." + }, + "313": { + "title": "Egregious", + "subtitle": "Outstandingly bad; shocking", + "description": "His **egregious** error in judgment cost the company millions." + }, + "314": { + "title": "Facetious", + "subtitle": "Treating serious issues with deliberately inappropriate humor; flippant", + "description": "His **facetious** remarks were ill-received during the somber meeting." + }, + "315": { + "title": "Garrulous", + "subtitle": "Excessively talkative, especially on trivial matters", + "description": "The **garrulous** passenger on the bus talked incessantly about her cats." + }, + "316": { + "title": "Hedonist", + "subtitle": "A person who believes that the pursuit of pleasure is the most important thing in life; a pleasure-seeker", + "description": "As a devoted **hedonist**, he sought out every opportunity for enjoyment." + }, + "317": { + "title": "Imperious", + "subtitle": "Assuming power or authority without justification; arrogant and domineering", + "description": "The CEO's **imperious** demeanor made him unpopular with his employees." + }, + "318": { + "title": "Jettison", + "subtitle": "Throw or drop (something) from an aircraft or ship; abandon or discard (someone or something that is no longer wanted)", + "description": "The company decided to **jettison** the outdated technology in favor of newer innovations." + }, + "319": { + "title": "Kinetic", + "subtitle": "Relating to or resulting from motion", + "description": "The dancer's performance was a display of pure **kinetic** energy and grace." + }, + "320": { + "title": "Labyrinthine", + "subtitle": "(of a network of paths and hedges) intricate and confusing; (of a system or process) complicated and tortuous", + "description": "The old castle had **labyrinthine** corridors where visitors often got lost." + }, + "321": { + "title": "Misanthrope", + "subtitle": "A person who dislikes humankind and avoids human society", + "description": "Despite his gruff exterior, the old **misanthrope** secretly cared for his neighbors." + }, + "322": { + "title": "Nefarious", + "subtitle": "Wicked or criminal", + "description": "The police uncovered a **nefarious** plot to hack into government databases." + }, + "323": { + "title": "Obsequious", + "subtitle": "Obedient or attentive to an excessive or servile degree", + "description": "The assistant's **obsequious** behavior was clearly an attempt to gain favor with the boss." + }, + "324": { + "title": "Pellucid", + "subtitle": "Translucently clear; easily understood; limpid", + "description": "The professor's explanation was so **pellucid** that even the most complex theories became clear." + }, + "325": { + "title": "Quixotic", + "subtitle": "Extremely idealistic; unrealistic and impractical", + "description": "Her **quixotic** vision of a perfectly harmonious world was beautiful but unattainable." + }, + "326": { + "title": "Repudiate", + "subtitle": "Refuse to accept or be associated with", + "description": "He felt compelled to **repudiate** the false rumors circulating about him." + }, + "327": { + "title": "Satiate", + "subtitle": "Satisfy (a desire or an appetite) to the full", + "description": "No amount of food could truly **satiate** his hunger after weeks in the wilderness." + }, + "328": { + "title": "Tendentious", + "subtitle": "Expressing or intending to promote a particular cause or point of view, especially a controversial one", + "description": "The documentary's **tendentious** narrative left little room for dissenting opinions." + }, + "329": { + "title": "Unilateral", + "subtitle": "(of an action or decision) performed or undertaken by one person or party without the agreement of another or others", + "description": "The company made a **unilateral** decision to cut benefits, angering its employees." + }, + "330": { + "title": "Vignette", + "subtitle": "A brief evocative description, account, or episode", + "description": "The play was presented as a series of short, interconnected **vignettes**." + }, + "331": { + "title": "Wizened", + "subtitle": "Shriveled or wrinkled with age", + "description": "The old farmer's hands were **wizened** from years of working in the fields." + }, + "332": { + "title": "Xenophobe", + "subtitle": "A person who has a dislike of or prejudice against people from other countries", + "description": "His comments revealed him to be a deeply ingrained **xenophobe**." + }, + "333": { + "title": "Yawn", + "subtitle": "An involuntary opening of the mouth and deep inhalation of air, usually indicating tiredness", + "description": "He stifled a **yawn** during the boring lecture." + }, + "334": { + "title": "Zephyr", + "subtitle": "A soft, gentle breeze", + "description": "A warm **zephyr** blew in from the ocean, bringing relief from the heat." + }, + "335": { + "title": "Absurd", + "subtitle": "Wildly unreasonable, illogical, or inappropriate", + "description": "The idea of a talking dog was utterly **absurd**, but charming in the story." + }, + "336": { + "title": "Bigot", + "subtitle": "A person who is intolerant toward those holding different opinions", + "description": "His **bigoted** remarks caused offense and were widely condemned." + }, + "337": { + "title": "Conceit", + "subtitle": "Excessive pride in oneself; a fanciful expression in writing or speech; an elaborate metaphor", + "description": "The author used an extended **conceit** of a ship's journey to represent life's challenges." + }, + "338": { + "title": "Debunk", + "subtitle": "Expose the falseness or hollowness of (a myth, idea, or belief)", + "description": "Scientists worked to **debunk** the popular myth about certain foods." + }, + "339": { + "title": "Eloquent", + "subtitle": "Fluent or persuasive in speaking or writing", + "description": "Her **eloquent** speech captivated the audience and inspired action." + }, + "340": { + "title": "Fickle", + "subtitle": "Changing frequently, especially as regards one's loyalties, interests, or affection", + "description": "The weather in March is notoriously **fickle**, constantly shifting between sun and rain." + }, + "341": { + "title": "Glib", + "subtitle": "(of words or the person speaking them) fluent and voluble but insincere and shallow", + "description": "His **glib** assurances failed to convince anyone of his sincerity." + }, + "342": { + "title": "Harrowing", + "subtitle": "Acutely distressing", + "description": "The survivors recounted their **harrowing** ordeal at sea." + }, + "343": { + "title": "Idiosyncrasy", + "subtitle": "A peculiarity of constitution or temperament; a distinctive or peculiar feature or characteristic of a place or thing", + "description": "One of her many **idiosyncrasies** was her habit of wearing mismatched socks." + }, + "344": { + "title": "Jubilant", + "subtitle": "Feeling or expressing great happiness and triumph", + "description": "The entire city was **jubilant** after the sports team won the championship." + }, + "345": { + "title": "Kaleidoscope", + "subtitle": "A constantly changing pattern or sequence of elements; a tube with mirrors and pieces of colored glass or paper, whose reflections produce changing patterns", + "description": "The city at night was a **kaleidoscope** of lights and colors." + }, + "346": { + "title": "Languid", + "subtitle": "Having a disinclination for physical exertion or effort; slow and relaxed", + "description": "The hot afternoon induced a feeling of **languid** contentment." + }, + "347": { + "title": "Mellifluous", + "subtitle": "Sweet or musical; pleasant to hear", + "description": "The singer's **mellifluous** voice filled the concert hall." + }, + "348": { + "title": "Nadir", + "subtitle": "The lowest point in the fortunes of a person or organization", + "description": "After losing everything, he felt he had reached his absolute **nadir**." + }, + "349": { + "title": "Obfuscate", + "subtitle": "Render obscure, unclear, or unintelligible", + "description": "The legal document was written in a way that seemed designed to **obfuscate** its true meaning." + }, + "350": { + "title": "Pellucid", + "subtitle": "Translucently clear; easily understood; limpid", + "description": "The mountain stream was so **pellucid** that you could see every stone at the bottom." + }, + "351": { + "title": "Querulous", + "subtitle": "Complaining in a petulant or whining manner", + "description": "The baby's incessant and **querulous** cries kept his parents awake all night." + }, + "352": { + "title": "Redolent", + "subtitle": "Strongly reminiscent or suggestive of something", + "description": "The scent of freshly baked bread was **redolent** of her grandmother's kitchen." + }, + "353": { + "title": "Sartorial", + "subtitle": "Relating to tailoring, clothes, or style of dress", + "description": "His **sartorial** elegance was always remarked upon at formal events." + }, + "354": { + "title": "Tergiversate", + "subtitle": "Make conflicting or evasive statements; equivocate", + "description": "When pressed for details, the politician continued to **tergiversate**, avoiding a direct answer." + }, + "355": { + "title": "Ubiquitous", + "subtitle": "Present, appearing, or found everywhere", + "description": "Mobile phones are now truly **ubiquitous**, found in almost every hand." + }, + "356": { + "title": "Vituperative", + "subtitle": "Bitter and abusive", + "description": "The **vituperative** comments online were harsh and uncalled for." + }, + "357": { + "title": "Waggish", + "subtitle": "Humorous in a playful, mischievous, or facetious manner", + "description": "His **waggish** remarks often brought a smile to her face, even on bad days." + }, + "358": { + "title": "Xenial", + "subtitle": "Relating to or denoting the hospitality shown to guests or strangers", + "description": "The small village was famous for its **xenial** nature, welcoming all who passed through." + }, + "359": { + "title": "Ylem", + "subtitle": "(in the Big Bang theory) the primordial matter of the universe from which all later matter was formed", + "description": "The concept of **ylem** is fundamental to understanding the universe's earliest moments." + }, + "360": { + "title": "Zephyr", + "subtitle": "A soft, gentle breeze", + "description": "A light **zephyr** provided relief on the warm afternoon, gently stirring the leaves." + }, + "361": { + "title": "Anathema", + "subtitle": "Something or someone that one vehemently dislikes; a formal curse by a Pope or a council of the Church", + "description": "For many artists, commercialism is an **anathema** to pure creative expression." + }, + "362": { + "title": "Brocade", + "subtitle": "A rich fabric, typically silk, woven with a raised pattern, typically with gold or silver thread", + "description": "The ceremonial robes were made of heavy, intricately woven **brocade**." + }, + "363": { + "title": "Chicanery", + "subtitle": "The use of trickery to achieve a political, financial, or legal purpose", + "description": "The politician was accused of employing dirty tactics and **chicanery** during the election." + }, + "364": { + "title": "Disingenuous", + "subtitle": "Not candid or sincere, typically by pretending that one knows less about something than one really does", + "description": "His claim of ignorance was entirely **disingenuous**, as he was well-informed on the topic." + }, + "365": { + "title": "Eschew", + "subtitle": "Deliberately avoid using; abstain from", + "description": "He chose to **eschew** processed foods in favor of a natural, whole-food diet." + } +} \ No newline at end of file diff --git a/src/display_controller.py b/src/display_controller.py index 71af0b12..fe2c7279 100644 --- a/src/display_controller.py +++ b/src/display_controller.py @@ -32,6 +32,7 @@ from src.youtube_display import YouTubeDisplay from src.calendar_manager import CalendarManager from src.text_display import TextDisplay from src.music_manager import MusicManager +from src.of_the_day_manager import OfTheDayManager # Get logger without configuring logger = logging.getLogger(__name__) @@ -59,8 +60,10 @@ class DisplayController: self.calendar = CalendarManager(self.display_manager, self.config) if self.config.get('calendar', {}).get('enabled', False) else None self.youtube = YouTubeDisplay(self.display_manager, self.config) if self.config.get('youtube', {}).get('enabled', False) else None self.text_display = TextDisplay(self.display_manager, self.config) if self.config.get('text_display', {}).get('enabled', False) else None + self.of_the_day = OfTheDayManager(self.display_manager, self.config) if self.config.get('of_the_day', {}).get('enabled', False) else None logger.info(f"Calendar Manager initialized: {'Object' if self.calendar else 'None'}") logger.info(f"Text Display initialized: {'Object' if self.text_display else 'None'}") + logger.info(f"OfTheDay Manager initialized: {'Object' if self.of_the_day else 'None'}") logger.info("Display modes initialized in %.3f seconds", time.time() - init_time) # Initialize Music Manager @@ -240,6 +243,7 @@ class DisplayController: if self.calendar: self.available_modes.append('calendar') if self.youtube: self.available_modes.append('youtube') if self.text_display: self.available_modes.append('text_display') + if self.of_the_day: self.available_modes.append('of_the_day') # Add Music display mode if enabled if self.music_manager: # Will be non-None only if successfully initialized and enabled @@ -469,6 +473,7 @@ class DisplayController: if self.calendar: self.calendar.update(time.time()) if self.youtube: self.youtube.update() if self.text_display: self.text_display.update() + if self.of_the_day: self.of_the_day.update(time.time()) # Update NHL managers if self.nhl_live: self.nhl_live.update() @@ -939,6 +944,8 @@ class DisplayController: logger.debug(f"Timer expired for regular mode {self.current_display_mode}. Switching.") if self.current_display_mode == 'calendar' and self.calendar: self.calendar.advance_event() + elif self.current_display_mode == 'of_the_day' and self.of_the_day: + self.of_the_day.advance_item() needs_switch = True self.current_mode_index = (self.current_mode_index + 1) % len(self.available_modes) new_mode_after_timer = self.available_modes[self.current_mode_index] @@ -979,6 +986,8 @@ class DisplayController: manager_to_display = self.youtube elif self.current_display_mode == 'text_display' and self.text_display: manager_to_display = self.text_display + elif self.current_display_mode == 'of_the_day' and self.of_the_day: + manager_to_display = self.of_the_day # Add other regular managers (NHL recent/upcoming, NBA, MLB, Soccer, NFL, NCAA FB) elif self.current_display_mode == 'nhl_recent' and self.nhl_recent: manager_to_display = self.nhl_recent @@ -1050,6 +1059,8 @@ class DisplayController: manager_to_display.display(force_clear=self.force_clear) elif self.current_display_mode == 'text_display': manager_to_display.display() # Assumes internal clearing + elif self.current_display_mode == 'of_the_day': + manager_to_display.display(force_clear=self.force_clear) elif self.current_display_mode == 'nfl_live' and self.nfl_live: self.nfl_live.display(force_clear=self.force_clear) elif self.current_display_mode == 'ncaa_fb_live' and self.ncaa_fb_live: diff --git a/src/of_the_day_manager.py b/src/of_the_day_manager.py new file mode 100644 index 00000000..92483fed --- /dev/null +++ b/src/of_the_day_manager.py @@ -0,0 +1,281 @@ +import os +import json +import logging +from datetime import datetime, date +from PIL import Image, ImageDraw, ImageFont +import numpy as np +from rgbmatrix import graphics +import pytz +from src.config_manager import ConfigManager +import time + +# Configure logger for this module +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +class OfTheDayManager: + def __init__(self, display_manager, config): + logger.info("Initializing OfTheDayManager") + self.display_manager = display_manager + self.config = config + self.of_the_day_config = config.get('of_the_day', {}) + self.enabled = self.of_the_day_config.get('enabled', False) + self.update_interval = self.of_the_day_config.get('update_interval', 3600) # 1 hour default + self.last_update = 0 + self.last_display_log = 0 + self.current_day = None + self.current_items = {} + self.current_item_index = 0 + self.current_category_index = 0 + + # Load categories and their data + self.categories = self.of_the_day_config.get('categories', {}) + self.category_order = self.of_the_day_config.get('category_order', []) + + # Display properties + self.title_color = (255, 255, 255) # White + self.subtitle_color = (200, 200, 200) # Light gray + self.background_color = (0, 0, 0) # Black + + # State management + self.force_clear = False + + # Load data files + self.data_files = {} + self._load_data_files() + + logger.info(f"OfTheDayManager configuration: enabled={self.enabled}, categories={list(self.categories.keys())}") + + if self.enabled: + self._load_todays_items() + else: + logger.warning("OfTheDayManager is disabled in configuration") + + def _load_data_files(self): + """Load all data files for enabled categories.""" + if not self.enabled: + return + + for category_name, category_config in self.categories.items(): + if not category_config.get('enabled', True): + continue + + data_file = category_config.get('data_file') + if not data_file: + logger.warning(f"No data file specified for category: {category_name}") + continue + + try: + # Try relative path first, then absolute + file_path = data_file + if not os.path.isabs(file_path): + file_path = os.path.join(os.path.dirname(__file__), '..', 'of_the_day', data_file) + + if os.path.exists(file_path): + with open(file_path, 'r', encoding='utf-8') as f: + self.data_files[category_name] = json.load(f) + logger.info(f"Loaded data file for {category_name}: {len(self.data_files[category_name])} items") + else: + logger.error(f"Data file not found for {category_name}: {file_path}") + self.data_files[category_name] = {} + except Exception as e: + logger.error(f"Error loading data file for {category_name}: {e}") + self.data_files[category_name] = {} + + def _load_todays_items(self): + """Load items for today based on the current date.""" + if not self.enabled: + return + + today = date.today() + day_of_year = today.timetuple().tm_yday + + self.current_items = {} + + for category_name, category_config in self.categories.items(): + if not category_config.get('enabled', True): + continue + + data = self.data_files.get(category_name, {}) + if not data: + continue + + # Get item for today (day of year) + item = data.get(str(day_of_year)) + if item: + self.current_items[category_name] = item + logger.info(f"Loaded {category_name} item for day {day_of_year}: {item.get('title', 'No title')}") + else: + logger.warning(f"No item found for {category_name} on day {day_of_year}") + + self.current_day = today + self.current_category_index = 0 + self.current_item_index = 0 + + def update(self, current_time): + """Update items if needed (daily or on interval).""" + if not self.enabled: + logger.debug("OfTheDayManager is disabled, skipping update") + return + + today = date.today() + + # Check if we need to load new items (new day or first time) + if self.current_day != today: + logger.info("New day detected, loading new items") + self._load_todays_items() + + # Check if we need to update based on interval + if current_time - self.last_update > self.update_interval: + logger.debug("OfTheDayManager update interval reached") + self.last_update = current_time + + def draw_item(self, category_name, item): + """Draw a single 'of the day' item.""" + try: + title = item.get('title', 'No Title') + subtitle = item.get('subtitle', '') + description = item.get('description', '') + + # Clear the display + self.display_manager.clear() + + # Draw title in extra small font at the top for maximum text fitting + title_width = self.display_manager.get_text_width(title, self.display_manager.extra_small_font) + title_x = (self.display_manager.matrix.width - title_width) // 2 + self.display_manager.draw_text(title, title_x, 2, + color=self.title_color, + font=self.display_manager.extra_small_font) + + # Draw subtitle/description in extra small font below + if subtitle: + subtitle_width = self.display_manager.get_text_width(subtitle, self.display_manager.extra_small_font) + subtitle_x = (self.display_manager.matrix.width - subtitle_width) // 2 + self.display_manager.draw_text(subtitle, subtitle_x, 12, + color=self.subtitle_color, + font=self.display_manager.extra_small_font) + elif description: + # Wrap description text if it's too long + available_width = self.display_manager.matrix.width - 4 + wrapped_lines = self._wrap_text(description, available_width, self.display_manager.extra_small_font, max_lines=3) + + for i, line in enumerate(wrapped_lines): + if line.strip(): + line_width = self.display_manager.get_text_width(line, self.display_manager.extra_small_font) + line_x = (self.display_manager.matrix.width - line_width) // 2 + self.display_manager.draw_text(line, line_x, 12 + (i * 8), + color=self.subtitle_color, + font=self.display_manager.extra_small_font) + + return True + except Exception as e: + logger.error(f"Error drawing 'of the day' item: {e}", exc_info=True) + return False + + def _wrap_text(self, text, max_width, font, max_lines=2): + """Wrap text to fit within max_width using the provided font.""" + if not text: + return [""] + + lines = [] + current_line = [] + words = text.split() + + for word in words: + # Try adding the word to the current line + test_line = ' '.join(current_line + [word]) if current_line else word + text_width = self.display_manager.get_text_width(test_line, font) + + if text_width <= max_width: + # Word fits, add it to current line + current_line.append(word) + else: + # Word doesn't fit, start a new line + if current_line: + lines.append(' '.join(current_line)) + current_line = [word] + else: + # Single word too long, truncate it + truncated = word + while len(truncated) > 0: + if self.display_manager.get_text_width(truncated + "...", font) <= max_width: + lines.append(truncated + "...") + break + truncated = truncated[:-1] + if not truncated: + lines.append(word[:10] + "...") + + # Check if we've filled all lines + if len(lines) >= max_lines: + break + + # Handle any remaining text in current_line + if current_line and len(lines) < max_lines: + remaining_text = ' '.join(current_line) + if len(words) > len(current_line): # More words remain + # Try to fit with ellipsis + while len(remaining_text) > 0: + if self.display_manager.get_text_width(remaining_text + "...", font) <= max_width: + lines.append(remaining_text + "...") + break + remaining_text = remaining_text[:-1] + else: + lines.append(remaining_text) + + # Ensure we have exactly max_lines + while len(lines) < max_lines: + lines.append("") + + return lines[:max_lines] + + def display(self, force_clear=False): + """Display 'of the day' items on the LED matrix.""" + if not self.enabled or not self.current_items: + return + + try: + if force_clear: + self.display_manager.clear() + self.force_clear = True + + # Get current category and item + category_names = list(self.current_items.keys()) + if not category_names: + return + + if self.current_category_index >= len(category_names): + self.current_category_index = 0 + + current_category = category_names[self.current_category_index] + current_item = self.current_items[current_category] + + # Log the item being displayed, but only every 5 seconds + current_time = time.time() + if current_time - self.last_display_log > 5: + title = current_item.get('title', 'No Title') + logger.info(f"Displaying {current_category}: {title}") + self.last_display_log = current_time + + # Draw the item + self.draw_item(current_category, current_item) + + # Update the display + self.display_manager.update_display() + + except Exception as e: + logger.error(f"Error displaying 'of the day' item: {e}", exc_info=True) + + def advance_item(self): + """Advance to the next item. Called by DisplayController when display time is up.""" + if not self.enabled: + logger.debug("OfTheDayManager is disabled, skipping item advance") + return + + category_names = list(self.current_items.keys()) + if not category_names: + return + + self.current_category_index += 1 + if self.current_category_index >= len(category_names): + self.current_category_index = 0 + logger.debug(f"OfTheDayManager advanced to category index {self.current_category_index}") \ No newline at end of file diff --git a/test/test_of_the_day.py b/test/test_of_the_day.py new file mode 100644 index 00000000..dbd79b39 --- /dev/null +++ b/test/test_of_the_day.py @@ -0,0 +1,138 @@ +#!/usr/bin/env python3 + +import sys +import os +import json +from datetime import date + +# Add the project root to the path +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + +from src.of_the_day_manager import OfTheDayManager +from src.display_manager import DisplayManager +from src.config_manager import ConfigManager + +def test_of_the_day_manager(): + """Test the OfTheDayManager functionality.""" + + print("Testing OfTheDayManager...") + + # Load config + config_manager = ConfigManager() + config = config_manager.load_config() + + # Create a mock display manager (we won't actually display) + display_manager = DisplayManager(config) + + # Create the OfTheDayManager + of_the_day = OfTheDayManager(display_manager, config) + + print(f"OfTheDayManager enabled: {of_the_day.enabled}") + print(f"Categories loaded: {list(of_the_day.categories.keys())}") + print(f"Data files loaded: {list(of_the_day.data_files.keys())}") + + # Test loading today's items + today = date.today() + day_of_year = today.timetuple().tm_yday + print(f"Today is day {day_of_year} of the year") + + of_the_day._load_todays_items() + print(f"Today's items: {list(of_the_day.current_items.keys())}") + + # Test data file loading + for category_name, data in of_the_day.data_files.items(): + print(f"Category '{category_name}': {len(data)} items loaded") + if str(day_of_year) in data: + item = data[str(day_of_year)] + print(f" Today's item: {item.get('title', 'No title')}") + else: + print(f" No item found for day {day_of_year}") + + # Test text wrapping + test_text = "This is a very long text that should be wrapped to fit on the LED matrix display" + wrapped = of_the_day._wrap_text(test_text, 60, display_manager.extra_small_font, max_lines=3) + print(f"Text wrapping test: {wrapped}") + + print("OfTheDayManager test completed successfully!") + +def test_data_files(): + """Test that all data files are valid JSON.""" + + print("\nTesting data files...") + + data_dir = "of_the_day" + if not os.path.exists(data_dir): + print(f"Data directory {data_dir} not found!") + return + + for filename in os.listdir(data_dir): + if filename.endswith('.json'): + filepath = os.path.join(data_dir, filename) + try: + with open(filepath, 'r', encoding='utf-8') as f: + data = json.load(f) + print(f"✓ {filename}: {len(data)} items") + + # Check for today's entry + today = date.today() + day_of_year = today.timetuple().tm_yday + if str(day_of_year) in data: + item = data[str(day_of_year)] + print(f" Today's item: {item.get('title', 'No title')}") + else: + print(f" No item for day {day_of_year}") + + except Exception as e: + print(f"✗ {filename}: Error - {e}") + + print("Data files test completed!") + +def test_config(): + """Test the configuration is valid.""" + + print("\nTesting configuration...") + + config_manager = ConfigManager() + config = config_manager.load_config() + + of_the_day_config = config.get('of_the_day', {}) + + if not of_the_day_config: + print("✗ No 'of_the_day' configuration found in config.json") + return + + print(f"✓ OfTheDay configuration found") + print(f" Enabled: {of_the_day_config.get('enabled', False)}") + print(f" Update interval: {of_the_day_config.get('update_interval', 'Not set')}") + + categories = of_the_day_config.get('categories', {}) + print(f" Categories: {list(categories.keys())}") + + for category_name, category_config in categories.items(): + enabled = category_config.get('enabled', False) + data_file = category_config.get('data_file', 'Not set') + print(f" {category_name}: enabled={enabled}, data_file={data_file}") + + # Check display duration + display_durations = config.get('display', {}).get('display_durations', {}) + of_the_day_duration = display_durations.get('of_the_day', 'Not set') + print(f" Display duration: {of_the_day_duration} seconds") + + print("Configuration test completed!") + +if __name__ == "__main__": + print("=== OfTheDay System Test ===\n") + + try: + test_config() + test_data_files() + test_of_the_day_manager() + + print("\n=== All tests completed successfully! ===") + print("\nTo test the display on the Raspberry Pi, run:") + print("python3 run.py") + + except Exception as e: + print(f"\n✗ Test failed with error: {e}") + import traceback + traceback.print_exc() \ No newline at end of file