Commit Graph

237 Commits

Author SHA1 Message Date
b33552f6b1 fix: add error handling for image loading
- Implemented error handling for image loading to prevent application
  crashes when an image fails to load.
- Added logging to capture the error message when an image cannot be
  displayed.

This change improves the reliability of the image display feature on
the home page, ensuring that users are not met with a broken layout
if an image fails to load.
2025-03-25 17:15:19 +08:00
6b3d290c4e feat: add download card for weather arts
- Create a download card component for weather arts
- Include options for premium purchase, medium quality, and a free WebP version
- Ensure proper layout and styling for the download options

This addition enhances the user experience by providing a clear
and organized way to download various versions of the weather
art. It also includes functionality for both paid and free
options, addressing different user needs.
2025-03-24 17:31:05 +08:00
c27bab7dc9 refactor: simplify weather art creation process
- Moved weather art creation inside the transaction block
- Updated variable names for clarity
- Ensured the transaction block manages the creation and attachment of images more clearly

This refactor improves the readability and maintainability of the
`create_weather_art` method while preserving its original
functionality. The changes also ensure that the transaction
affects the creation and attachment operations coherently.
2025-03-22 11:29:54 +08:00
c489c19467 chore: set S3 bucket ACL to private
- Update AWS S3 adapter configuration to set the
  access control list (ACL) to private for both
  production and development environments.
- This ensures that the sitemap files are not publicly
  accessible and are only retrievable by authorized
  users or applications, improving security.
2025-03-22 11:11:50 +08:00
d4141c7639 Merge branch 'dev' 2025-03-16 00:19:28 +08:00
f2e2c8c4d8 refactor: update AWS S3 credentials configuration
- Modify AWS credentials to use 's3' instead of 'minio' for both production and development environments.
- Update associated initializers, environment configurations, and sitemap generator settings.
- Simplify the configuration retrieval by aligning with new standards for S3.

These changes ensure consistent access to AWS S3 resources and improve maintainability by aligning with updated environment variable practices.
2025-03-16 00:13:37 +08:00
2f33f92f49 fix: handle weather art generation errors properly
- Ensure created weather art is deleted if an error occurs
- Log detailed error messages for better debugging

This change improves the stability of the weather art
generation process by ensuring that failed operations
release resources properly, preventing potential
memory leaks or database clutter.
2025-03-15 23:16:21 +08:00
0a75ea9bd5 fix: ensure weather art images are processed
- Moved image processing to after the weather_art assignment.
- This change guarantees that the webp and preview images are processed before returning the weather_art object.
- Resolves potential issues where image processing wouldn't occur if the returned value wasn't properly assigned initially.
2025-03-15 20:39:46 +08:00
257d802fe3 fix: process weather art images correctly
- Add processing for webp_image and preview_image

This fix ensures that both webp and preview images of the weather art
are processed correctly after generation, resolving issues related to
image availability in the system.
2025-03-15 14:50:15 +08:00
fb6133f736 fix: handle image load errors in arts view
- Wrap image tag with begin-rescue to catch errors
- Display fallback message when image fails to load
- Log error messages to Rails logger for debugging

This change improves the robustness of the image loading
feature in the arts view by handling potential exceptions
when loading images. Users will see a placeholder message
if the image fails to load, enhancing user experience and
ensuring that the application does not crash due to unhandled
image load errors.
2025-03-10 23:55:25 +08:00
44f446c069 fix: adjust timing for weather arts generation
- Increase MAX_DURATION to allow longer processing time.
- Double SLEEP_DURATION to reduce server load between runs.
- Raise PER_RUN_GENERATION_LIMIT to improve throughput.

These changes enhance the performance of the weather arts generation
job by allowing longer intervals and reducing the frequency of
interruptions while also accommodating additional requests per run.
2025-03-06 09:22:40 +08:00
d8a2600998 chore: update sleep duration for weather arts worker
- Increase SLEEP_DURATION from 10 seconds to 60 seconds

This change modifies the sleep duration used in the
BatchGenerateWeatherArtsWorker class, allowing for longer
wait times between executions. This may help prevent
exceeding resource limits during high-demand periods.
2025-03-05 17:53:02 +08:00
2aad3ec5b4 fix: improve tag formatting functionality
- Update `format_as_tag` method to replace hyphens with
  underscores in addition to spaces.
- Ensure the method handles blank inputs properly.

This change improves the consistency of tag formatting by
ensuring that both spaces and hyphens are converted into
underscores, enhancing the usability and reliability of
this helper method.
2025-03-05 16:43:14 +08:00
f4337240f7 feat: enhance tag formatting options
- Update formatting to replace spaces with underscores
- Add functionality to replace hyphens with underscores
- Clarify comments to reflect new formatting behavior

These changes improve the flexibility of the tag formatting method by
allowing both spaces and hyphens to be standardized as underscores,
ensuring consistent tag representations.
2025-03-05 16:36:28 +08:00
9ff27cbe4d fix: correct region and subregion retrieval
- Update region access to use country.region instead of city.region
- Update subregion access to use country.subregion instead of city.subregion

These changes ensure that the region and subregion are accurately retrieved based on the correct geographical hierarchy, improving the data integrity of the application.
2025-03-05 16:26:10 +08:00
5de3d4306f feat: add tag formatting helper 2025-03-05 16:20:08 +08:00
2d227d5871 feat: add region and subregion to RSS feed 2025-03-05 15:55:50 +08:00
789fe06c2a fix: update metadata structure in RSS feed 2025-03-05 15:40:33 +08:00
9dd6fc26f8 feat: add formatted date to RSS feed response
- Include formattedDate in the RSS feed response
- Utilize art.formatted_time method for better date formatting

This change enhances the RSS feed by providing a more user-friendly
formatted date alongside the existing weather date. This allows
clients consuming the RSS feed to display dates in a more readable
format, improving overall usability.
2025-03-05 15:38:53 +08:00
d39a7deea2 feat: update RSS feed routes and logging
- Change route for RSS feed to use defaults for format
- Add logging to RssController#feed to track request format

These changes improve the clarity of the routing for the RSS feed
and enhance debugging capabilities by logging the request format.
The new route definition ensures that the feed responds correctly
with the default format, while the logging provides insight into
how the feed is being accessed.
2025-03-05 15:18:15 +08:00
4e322bd6e9 feat: add JSON feed support for weather art
- Implement JSON feed generation in the RssController
- Add new API endpoint to serve JSON feed
- Update RSS feed view to include hidden machine-readable data

This commit introduces a new feature that allows the application to
serve weather art data in JSON format. The JSON feed includes
metadata such as the title, description, and additional custom
fields for better integration with other services. The changes
also enhance the existing RSS feed by embedding machine-readable
data within the HTML structure, improving accessibility and
usability for automated systems.
2025-03-05 14:59:02 +08:00
e22d3d86de feat: enhance RSS feed with weather data
- Add custom XML namespace for weather data
- Include additional weather fields: country, city, state,
  weather description, prompt, and formatted date
- Update enclosure type to 'image/webp' for better
  compatibility

This update improves the RSS feed by providing more detailed
weather information for each art piece, enhancing the
user experience and ensuring better data representation.
The new fields allow for richer content in the feed, making
it more informative for users.
2025-03-05 14:42:14 +08:00
2b7318a858 feat: optimize RSS feed with eager loading
- Include image attachments and city associations in the
  RSS feed query to improve performance.
- This change reduces the number of database queries
  needed when rendering the feed, addressing potential
  N+1 query problems.
2025-03-05 14:15:31 +08:00
c82af65c26 feat: enhance RSS feed with additional weather data
- Add country name, city name, and state name to the RSS feed
- Include weather description and AI-generated description
- Add weather date to provide more context for each item

These changes improve the RSS feed by providing more detailed
information about the weather art, enhancing the user experience
and making the feed more informative for subscribers.
2025-03-05 13:46:57 +08:00
acbde3b034 feat: add hashtag support to social share button
- Include data-hashtag attribute in the Facebook share button
- Comment out an alternative database URL in credentials

This update enhances the social sharing feature by allowing
users to include hashtags when sharing content on Facebook.
The commented-out database URL serves as a reference for
future configurations.
2025-03-04 14:46:13 +08:00
98094ac0e4 style: standardize role casing in AI service 2025-03-02 11:17:05 +08:00
98f60d270e refactor: remove language switcher from navbar
- Removed the language switcher component from the
  navigation bar.
- This change simplifies the user interface, focusing
  on primary navigation elements.

The decision was made to streamline navigation and reduce
clutter, as the language switcher was deemed not essential
for the current user experience.
2025-02-28 13:23:21 +08:00
30508af344 feat: add pagination parameters to weather arts
- Include region, country, state, and query parameters
  in the pagination helper for better filtering.
- This change enhances the user experience by allowing
  users to navigate through weather arts based on
  specific criteria, improving the relevance of the
  displayed results.
2025-02-26 15:59:39 +08:00
df7fbcd118 feat: enhance city pagination and data fetching
- Update cities controller to include state in city data
- Modify results partial to pass pagination parameters
- Adjust index view to support turbo frame actions

These changes improve the pagination functionality by ensuring
that the correct parameters are passed for filtering cities
based on region, country, and state. This enhances the user
experience by providing more relevant data and better
navigation through the city listings.
2025-02-26 15:31:45 +08:00
90c9a8946b fix: update cities path parameters
- Change cities_path to include both region and country
- Update active class logic to reflect current state

This fix ensures that the dropdown links correctly point to the
appropriate cities based on the selected region and country,
improving navigation and user experience.
2025-02-26 10:21:45 +08:00
f51dc8370b feat: add state filtering to cities index
- Implement state filtering in the CitiesController
- Add new scope `by_state` in the City model
- Update cities index view to include state dropdown
- Add slug column to states for friendly URLs
- Update English locale to include 'All States'

This commit enhances the cities index page by allowing users to
filter cities based on the selected state. It introduces a new
scope in the City model for state filtering and updates the
view to present a dropdown for state selection. Additionally,
it adds a slug column to the states table to support friendly
URLs, improving the overall user experience.
2025-02-26 09:48:39 +08:00
fe5c0d5113 fix: update sitemap retrieval logic
Some checks failed
Docker Dev / docker (push) Has been cancelled
CI / scan_ruby (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Docker Main / docker (push) Has been cancelled
- Change from using `get_object` to `head_object` to check if the
  sitemap file exists before attempting to retrieve it.
- Implement a presigned URL for accessing the sitemap, which is valid
  for 15 minutes.
- Set cache headers to allow for 1 hour of caching.
- Improved logging for better error tracking and debugging.

This change enhances the efficiency of sitemap retrieval by reducing
unnecessary data transfer and provides a more secure way to access
the sitemaps through presigned URLs. It also improves error handling
by logging specific errors related to missing sitemaps.
2025-02-24 17:42:55 +08:00
3ae870047a feat: add sitemap management feature
- Implement index action to list sitemaps
- Create view for displaying sitemaps with details
- Add helper method for generating sitemap URLs
- Enhance error handling for S3 service errors

This commit introduces a new feature for managing sitemaps in the application. It includes an index view that lists all available sitemaps with their last modified date and size, along with a link to view each sitemap. The error handling for S3 interactions has also been improved to log errors and return appropriate responses.
2025-02-24 17:28:21 +08:00
5f98d9ebfd feat: enhance language switcher dropdown
- Update dropdown to support dynamic locales from I18n
- Limit dropdown height with overflow handling for better UX

This change improves the language switcher by dynamically
loading available locales from the I18n configuration. It
also enhances the user experience by limiting the height
of the dropdown and enabling scrolling, making it easier
to navigate through multiple language options.
2025-02-24 15:55:01 +08:00
b2cc7e7016 chore: update keywords for SEO optimization
- Refactor keywords in cities_controller.rb
- Refactor keywords in weather_arts_controller.rb
- Refactor keywords in application.html.erb

This change improves the SEO of the application by updating
keywords to include 'ai' and 'ai web', which are more relevant
and likely to enhance search visibility. The previous keywords
were less optimized for current trends in AI-related searches.
2025-02-24 14:12:51 +08:00
da2f4f6c86 fix: update keywords for better SEO
- Modify keywords in cities_controller.rb to include 'ai weather'
- Update keywords in weather_arts_controller.rb to include 'ai weather'
- Change keywords in application.html.erb to include 'ai weather'

These changes enhance the search engine optimization (SEO) of the
application by ensuring that relevant keywords are included in
meta tags, improving visibility for users searching for AI
weather-related content.
2025-02-24 14:10:32 +08:00
3661d2b008 chore: update meta keywords for SEO
- Modify keywords in CitiesController for better
  categorization of AI art and weather art.
- Update keywords in WeatherArtsController to include
  city country name and description.
- Add keywords in application layout for overall site
  SEO improvement.

These changes aim to improve search engine visibility
and better describe the content related to AI-generated
weather art.
2025-02-24 14:08:25 +08:00
0e476b546d feat: add locking mechanism to batch task worker
Some checks failed
Docker Dev / docker (push) Has been cancelled
CI / scan_ruby (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Docker Main / docker (push) Has been cancelled
- Introduce a Redis-based lock to prevent concurrent execution of
  batch generation tasks.
- Set a TTL of 300 seconds for the lock to ensure it is released
  after a timeout.
- Add logging for situations where a task is already in progress.

This enhancement ensures that batch tasks do not overlap, which can
lead to data inconsistencies and resource contention. The locking
mechanism improves the reliability of the batch processing system.
2025-02-22 15:41:42 +08:00
d331a73a85 fix: update html lang attribute for I18n
- Change the lang attribute of the HTML tag to use the current I18n locale
- This change ensures that the application correctly reflects the user's language preferences

Updating this attribute improves accessibility and SEO by helping search engines and assistive technologies better understand the language of the content.
2025-02-22 15:19:40 +08:00
5a82fc9a10 style: correct string split style
- Change string split method from single quotes to double quotes.

This commit improves code consistency by aligning the string
split syntax with the rest of the codebase. No functional
changes were made as a result of this update.
2025-02-22 15:00:37 +08:00
926ba18e85 refactor: change locale handling to around_action
- Update set_locale method to use around_action instead of before_action.
- Modify locale extraction logic to handle more cases, ensuring better fallback handling.
- Improve overall method clarity and maintainability by restructuring code.

This change enhances the localization process by providing a clearer
way to manage locale settings and ensures that it correctly falls back
to the default locale when necessary. It also resolves some edge cases
in locale extraction based on the HTTP_ACCEPT_LANGUAGE header.
2025-02-22 15:00:22 +08:00
09fa1ceea9 feat: update sitemap generation for multiple locales
- Refactor generate_sitemap method to support locale
- Add setup_sitemap_config method for configuration
- Implement sitemap generation for default and localized paths

This update enhances the sitemap generation process by supporting
multiple languages. Users can now access a sitemap with language
prefixes, improving SEO and usability for different locales.
Additionally, error handling has been improved to log specific
errors related to locale generation.
2025-02-22 12:08:59 +08:00
5b996bb64a style: update layout and improve accessibility
Some checks are pending
Docker Dev / docker (push) Waiting to run
- Adjust footer components for better spacing
- Move language switcher to navbar for easier access
- Simplify language switcher links using iteration
- Enhance copyright text to dynamically reflect the current year
2025-02-22 01:03:40 +08:00
80ceac5d94 feat: add locale extraction and sanitization methods
- Implemented `extract_locale_from_accept_language_header` to
  retrieve the user's preferred language from the request.
- Added `sanitize_locale` for validating and sanitizing locale
  inputs against available locales.
- Updated `set_locale` method to prepare for incorporating
  browser language preference handling.

These changes enhance the application's ability to set the locale
based on the user's browser settings, paving the way for better
internationalization support.
2025-02-22 00:13:35 +08:00
bd42833953 feat: add translatable name module for countries and regions
- Introduced `TranslatableName` module to allow for
  localized names for `Country` and `Region` models.
- Updated views to display `localized_name` instead of
  `name` for improved internationalization.
- Refactored JSON serialization for `translations` attribute.
- Enhanced localization support by adding new languages:
  Japanese and Korean, with updated locale files.
- Removed outdated English and Chinese locales for countries
  and regions to clean up the codebase.
2025-02-21 23:46:25 +08:00
f6b9dcf187 feat: add internationalization support
- Implement locale extraction and fallback mechanism
- Add translation files for English and Chinese
- Update views to use translated strings for various UI elements

This commit introduces support for multiple languages in the application, enhancing accessibility for users. It includes a fallback mechanism for locales and updates to the user interface to display translated content.
2025-02-21 17:51:25 +08:00
9fe92b1fc4 feat: add RSS feed functionality
Some checks failed
Docker / docker (push) Has been cancelled
- Introduce RssController to handle RSS feed requests
- Add a new route for the RSS feed
- Implement RSS feed view to display weather art
- Update application layout to include RSS feed link
- Set content type for RSS responses

This commit adds an RSS feed feature that allows users to
subscribe to updates on daily AI-generated weather art.
The feed includes the latest weather art and relevant
metadata, enhancing user engagement and accessibility.
2025-02-19 17:38:49 +08:00
c35f09660a fix: handle nil safely for latest arts image
Some checks failed
CI / scan_ruby (push) Has been cancelled
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
Docker / docker (push) Has been cancelled
- Update image tag to safely access the first latest art
- Use safe navigation operator to prevent potential nil errors

This change ensures that if there are no latest arts or if the
image is not attached, the application will not raise an error.
It improves the robustness of the view by handling edge cases.
2025-02-19 14:18:14 +08:00
789e9f8d23 feat: migrate AWS configuration to MinIO
- Update SitemapsController to use MinIO credentials
- Modify RefreshSitemapWorker to adapt to MinIO settings
- Change AWS configuration in initializers and storage files
- Add MinIO credentials to credentials.yml.enc

This commit transitions the application from using AWS S3 to MinIO for
storage. It updates all relevant configurations and ensures that the
application can now interact with MinIO seamlessly, including
support for both production and development environments.
2025-02-19 11:31:57 +08:00
468a665354 style: update badge classes for weather art display
Some checks are pending
Docker / docker (push) Waiting to run
CI / scan_ruby (push) Waiting to run
CI / lint (push) Waiting to run
CI / test (push) Waiting to run
- Change badge class from 'badge-neutral' to 'badge-ghost' for
  better visual consistency.
- This update improves the UI by aligning the badge styles with
  the overall design language of the application.
2025-02-18 17:00:49 +08:00