diff --git a/.cspell-project-words.txt b/.cspell-project-words.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a00d77cc7a8b4e15cad376b1030545bad6807418
--- /dev/null
+++ b/.cspell-project-words.txt
@@ -0,0 +1,40 @@
+BYDAY
+BYEASTER
+BYHOUR
+BYMINUTE
+BYMONTH
+BYMONTHDAY
+BYSECOND
+BYSETPOS
+BYWEEKDAY
+BYWEEKNO
+BYYEARDAY
+datecompact
+datetimes
+DTEND
+DTSTAMP
+DTSTART
+~eventseries
+~eventinstance
+~eventinstances
+EXDATE
+EXRULE
+fromto
+~fullcalendar
+INCDATE
+langname
+LINELENGTH
+monthday
+monthdays
+nonwaitlisted
+PRODID
+recreator
+~rrule
+~rrule's
+~rrules
+VCALENDAR
+VEVENT
+~waitlist
+~waitlisted
+~webform
+WKST
diff --git a/README.md b/README.md
index cd7a1529680b7f6635b78747406b43379c93703e..baa7cea7abad188012ab6b6e11b2ef080426e351 100644
--- a/README.md
+++ b/README.md
@@ -202,7 +202,7 @@ modules can be written to modify, or enhance the core functionality
 of `recurring_events` by making use of these hooks.
 
 The `recurring_events` module also has a number of Field Inheritance plugins
-written to handle core fields, and custom plugins can be creared providing they
+written to handle core fields, and custom plugins can be created providing they
 implement the `FieldInheritance` annotation and extend
 the `FieldInheritancePluginBase` class. The core plugins are defined
 in `src/Plugin/FieldInheritance`.
diff --git a/modules/group_recurring_events_series/group_recurring_events_series.module b/modules/group_recurring_events_series/group_recurring_events_series.module
index d98db0fc4bfd4ff77f4b964a7f05738129cb8cae..0d656aff2c937486f5e07b10971c6cec8c824b63 100644
--- a/modules/group_recurring_events_series/group_recurring_events_series.module
+++ b/modules/group_recurring_events_series/group_recurring_events_series.module
@@ -12,7 +12,7 @@ use Drupal\Core\Url;
 /**
  * Implements hook_ENTITY_TYPE_insert().
  */
-function group_recurring_events_series_eventseries_type_insert(EventSeriesTypeInterface $eventserices_type) {
+function group_recurring_events_series_eventseries_type_insert(EventSeriesTypeInterface $eventseries_type) {
   if (\Drupal::isConfigSyncing()) {
     return;
   }
diff --git a/modules/recurring_events_ical/tests/src/Kernel/EventICalTest.php b/modules/recurring_events_ical/tests/src/Kernel/EventICalTest.php
index 0d9337cc86b8b34d3c011c6cc0c55a0b7f074fd5..35549bb12c9b950fa2d80e453cdf805b30df547a 100644
--- a/modules/recurring_events_ical/tests/src/Kernel/EventICalTest.php
+++ b/modules/recurring_events_ical/tests/src/Kernel/EventICalTest.php
@@ -98,6 +98,7 @@ class EventICalTest extends KernelTestBase {
     $this->assertPreamble($iCal);
     $this->assertSame('DTSTART:20220101T000000Z', $iCal[6]);
     $this->assertSame('DTEND:20220101T003000Z', $iCal[7]);
+    // cspell:ignore Seriousl
     $this->assertSame('SUMMARY:Test event with a title that is longer than 75 characters. Seriousl', $iCal[8]);
     $this->assertSame(' y, it just keeps going and going.', $iCal[9]);
     $this->assertSame('END:VEVENT', $iCal[10]);
diff --git a/modules/recurring_events_registration/recurring_events_registration.install b/modules/recurring_events_registration/recurring_events_registration.install
index ab1697c1606cecc4f7cd1bb81c9c921f2285a6c4..df8681f29616bf47d17d8147a27b6e95afee378e 100644
--- a/modules/recurring_events_registration/recurring_events_registration.install
+++ b/modules/recurring_events_registration/recurring_events_registration.install
@@ -67,7 +67,7 @@ function recurring_events_registration_update_8001() {
 }
 
 /**
- * Install the new type basefields for registrant.
+ * Install the new type base fields for registrant.
  */
 function recurring_events_registration_update_8002() {
   $registrant_type = BaseFieldDefinition::create('entity_reference')
@@ -180,7 +180,7 @@ function recurring_events_registration_update_8003() {
  * Add the default registration message configurations.
  */
 function recurring_events_registration_update_8004() {
-  // Configure the registrantion messages.
+  // Configure the registration messages.
   \Drupal::configFactory()->getEditable('recurring_events_registration.registrant.config')
     ->set('successfully_registered', 'Registrant successfully created.')
     ->set('successfully_registered_waitlist', 'Successfully registered to the waitlist.')
diff --git a/modules/recurring_events_registration/recurring_events_registration.module b/modules/recurring_events_registration/recurring_events_registration.module
index bc97021fc2c071079c502462e1fd2a077b980082..d46cf640a0adcdadf5f27bd37c66f2f40b301861 100644
--- a/modules/recurring_events_registration/recurring_events_registration.module
+++ b/modules/recurring_events_registration/recurring_events_registration.module
@@ -129,7 +129,7 @@ function template_preprocess_registrant(array &$variables) {
   // Set the registrant object to be accessible in the template.
   $variables['registrant'] = $variables['elements']['#registrant'];
 
-  // Set a class on the registrant to differentiate between viewmodes.
+  // Set a class on the registrant to differentiate between view modes.
   $variables['view_mode'] = $variables['elements']['#view_mode'];
   $variables['attributes']['class'][] = 'registrant-' . $variables['view_mode'];
 
@@ -146,7 +146,7 @@ function recurring_events_registration_mail($key, &$message, $params) {
   // Only if a value for 'subject', 'body' or 'from' has not been received in
   // the `$params`, then use the notification service which is able to get
   // those values from the `$key` and the `$registrant`.
-  // Some pieces of code can call the `mail()` function with already proccessed
+  // Some pieces of code can call the `mail()` function with already processed
   // values for 'subject', 'body' and 'from', meaning that it is not necessary
   // that those values are calculated here by the notification service.
   // @see \Drupal\recurring_events_registration\Plugin\QueueWorker\EmailNotificationsQueueWorker
diff --git a/modules/recurring_events_registration/recurring_events_registration.permissions.yml b/modules/recurring_events_registration/recurring_events_registration.permissions.yml
index 46bf4b6a4bf00983f220eb9750056f32b15972c7..fd258ab16747afa1ac6b35054c0e428e0ea33751 100644
--- a/modules/recurring_events_registration/recurring_events_registration.permissions.yml
+++ b/modules/recurring_events_registration/recurring_events_registration.permissions.yml
@@ -25,16 +25,16 @@ delete registrant entities anonymously:
   description: 'Delete a registrant using the UUID path'
 modify registrant waitlist:
   title: 'Modify registrant waitlist value'
-  decription: 'Allow a role to set and override the waitlist value of a registrant'
+  description: 'Allow a role to set and override the waitlist value of a registrant'
 modify registrant author:
   title: 'Modify registrant author value'
-  decription: 'Allow a role to set and override the author value of a registrant'
+  description: 'Allow a role to set and override the author value of a registrant'
 resend registrant emails:
   title: 'Resend registrant emails'
   description: 'Allow a role to resent the registration confirmation emails'
 contact registrants:
   title: 'Contact registrants'
-  decription: 'Allow a role to set contact registrants'
+  description: 'Allow a role to set contact registrants'
 administer registrant entity:
   title: 'Administer registrant entities'
   description: 'Allow to access the administration form to configure registrant entities'
diff --git a/modules/recurring_events_registration/src/Form/RegistrantForm.php b/modules/recurring_events_registration/src/Form/RegistrantForm.php
index 1b73899e98b2c0d8d05efcc39b2372d1c43d18b3..8e70ea688b8625a82f62cdf9b85f7243d62cb939 100644
--- a/modules/recurring_events_registration/src/Form/RegistrantForm.php
+++ b/modules/recurring_events_registration/src/Form/RegistrantForm.php
@@ -147,7 +147,7 @@ class RegistrantForm extends ContentEntityForm {
    * @param \Drupal\Core\Cache\CacheTagsInvalidatorInterface $cache_tags_invalidator
    *   The cache tags invalidator.
    * @param \Drupal\recurring_events_registration\NotificationService $notification_service
-   *   The registation notification service.
+   *   The registration notification service.
    * @param \Drupal\content_moderation\ModerationInformation $moderation_information
    *   The moderation information service.
    */
diff --git a/modules/recurring_events_registration/src/Form/RegistrantTypeForm.php b/modules/recurring_events_registration/src/Form/RegistrantTypeForm.php
index 3047cb641ff8183eff8d745cb99706a7d8d3df38..14e007be872695a2a297b651e6b39ffb72e87ec0 100644
--- a/modules/recurring_events_registration/src/Form/RegistrantTypeForm.php
+++ b/modules/recurring_events_registration/src/Form/RegistrantTypeForm.php
@@ -8,7 +8,7 @@ use Drupal\Core\Messenger\Messenger;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Provides a form for editing a registant type.
+ * Provides a form for editing a registrant type.
  */
 class RegistrantTypeForm extends EntityForm {
 
diff --git a/modules/recurring_events_registration/src/NotificationService.php b/modules/recurring_events_registration/src/NotificationService.php
index 3fb2215de4012b4986dab9d5fdac43f5edf0612a..5092c316a37bef5fe0a01934fb9acdb394867c1b 100644
--- a/modules/recurring_events_registration/src/NotificationService.php
+++ b/modules/recurring_events_registration/src/NotificationService.php
@@ -263,7 +263,7 @@ class NotificationService {
       $this->messenger->addError($this->translation->translate('No key defined for @module notifications.', [
         '@module' => 'recurring_events_registration',
       ]));
-      $this->loggerFactory->error('No key defined @module notifications. Call @function before proceding.', [
+      $this->loggerFactory->error('No key defined @module notifications. Call @function before proceeding.', [
         '@module' => 'recurring_events_registration',
         '@function' => 'NotificationService::setKey()',
       ]);
@@ -283,7 +283,7 @@ class NotificationService {
       $this->messenger->addError($this->translation->translate('No config name defined for @module notifications.', [
         '@module' => 'recurring_events_registration',
       ]));
-      $this->loggerFactory->error('No config name defined for @module notifications. Call @function before proceding.', [
+      $this->loggerFactory->error('No config name defined for @module notifications. Call @function before proceeding.', [
         '@module' => 'recurring_events_registration',
         '@function' => 'NotificationService::setConfigName()',
       ]);
@@ -494,7 +494,7 @@ class NotificationService {
         'body' => $message,
         'from' => $from,
       ];
-      // Allow modules to add data to the `$params`. Developers can get data 
+      // Allow modules to add data to the `$params`. Developers can get data
       // from `$registrant`. Those `$params` can be used later as the
       // `$params` in `hook_mail()` and `$message['params']` in
       // `hook_mail_alter()`.
diff --git a/modules/recurring_events_registration/src/Plugin/ComputedField/AvailabilityCount.php b/modules/recurring_events_registration/src/Plugin/ComputedField/AvailabilityCount.php
index b2634002a82c347b73533387380caaddbbbcad9a..5cd3fd81502859ac862191c8220200cac571b1d5 100644
--- a/modules/recurring_events_registration/src/Plugin/ComputedField/AvailabilityCount.php
+++ b/modules/recurring_events_registration/src/Plugin/ComputedField/AvailabilityCount.php
@@ -9,7 +9,7 @@ use Drupal\Core\TypedData\DataDefinitionInterface;
 use Drupal\Core\TypedData\TypedDataInterface;
 
 /**
- * A computed field that provides the availabilty count of an Event Instance.
+ * A computed field that provides the availability count of an Event Instance.
  */
 class AvailabilityCount extends FieldItemList {
 
diff --git a/modules/recurring_events_registration/src/RegistrationCreationService.php b/modules/recurring_events_registration/src/RegistrationCreationService.php
index e6fc8052b64f76b8e9a6d9579567ac830fc867b3..48cd9195f4cc09793c3e036a9f7c4c01352946a9 100644
--- a/modules/recurring_events_registration/src/RegistrationCreationService.php
+++ b/modules/recurring_events_registration/src/RegistrationCreationService.php
@@ -273,7 +273,7 @@ class RegistrationCreationService {
   }
 
   /**
-   * Retreive all registered parties for a series.
+   * Retrieve all registered parties for a series.
    *
    * @param bool $future_only
    *   Whether to only return registered parties for future events.
@@ -430,7 +430,7 @@ class RegistrationCreationService {
   }
 
   /**
-   * Retreive all waitlisted users.
+   * Retrieve all waitlisted users.
    *
    * @return array
    *   An array of Drupal\recurring_events_registration\Entity\Registrant users.
@@ -445,7 +445,7 @@ class RegistrationCreationService {
   }
 
   /**
-   * Retreive first user on the waitlist.
+   * Retrieve first user on the waitlist.
    *
    * @return \Drupal\recurring_events_registration\Entity\RegistrantInterface
    *   A fully loaded registrant entity.
diff --git a/modules/recurring_events_views/recurring_events_views.install b/modules/recurring_events_views/recurring_events_views.install
index c768fd546e29fe7c61bd689f4a6832567925f198..70033ae0f852f411496ddcd62bb017a91d67939a 100644
--- a/modules/recurring_events_views/recurring_events_views.install
+++ b/modules/recurring_events_views/recurring_events_views.install
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Install and update functionalit for the recurring_events_views module.
+ * Install and update functionality for the recurring_events_views module.
  */
 
 use Drupal\Core\Serialization\Yaml;
diff --git a/modules/recurring_events_views/recurring_events_views.module b/modules/recurring_events_views/recurring_events_views.module
index bf501dc8517c580afa01e618c81c16e2a9da1afc..7009542638ec6075013915ef8cf93e3055c912c1 100644
--- a/modules/recurring_events_views/recurring_events_views.module
+++ b/modules/recurring_events_views/recurring_events_views.module
@@ -62,7 +62,7 @@ function recurring_events_views_local_tasks_alter(&$local_tasks) {
  */
 function recurring_events_views_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
   // Because registration is complicated by series vs instance registration we
-  // need to modify the view to accomodate that. If an event has series
+  // need to modify the view to accommodate that. If an event has series
   // registration then viewing the registration list on any of the instances
   // should display all registrations for that event. However, if the event has
   // instance registration, then we should only see registrations for the
@@ -111,7 +111,7 @@ function recurring_events_views_views_query_alter(ViewExecutable $view, QueryPlu
  */
 function recurring_events_views_views_pre_render(ViewExecutable $view) {
   // Because registration is complicated by series vs instance registration we
-  // need to modify the view title to accomodate that.
+  // need to modify the view title to accommodate that.
   if ($view->id() === 'registrations' && $view->current_display === 'event_registrant_list') {
     if (\Drupal::moduleHandler()->moduleExists('recurring_events_registration')) {
       $eventinstance_id = \Drupal::routeMatch()->getParameters()->get('eventinstance');
diff --git a/recurring_events.install b/recurring_events.install
index ed840c92930ae03d1b1cff0a7089c46f63984d01..d4b44724392efa46f6f0a494a6739f989ce84ef8 100644
--- a/recurring_events.install
+++ b/recurring_events.install
@@ -279,7 +279,7 @@ function recurring_events_update_8005() {
 }
 
 /**
- * Install the new type basefields for series and instances.
+ * Install the new type base fields for series and instances.
  */
 function recurring_events_update_8006() {
   $series_type = BaseFieldDefinition::create('entity_reference')
diff --git a/recurring_events.module b/recurring_events.module
index 913f29171a01b057c3afe5140662e6da446d9b4a..eeec87ec117631a558c59b600dfc52afd96daf6c 100644
--- a/recurring_events.module
+++ b/recurring_events.module
@@ -104,7 +104,7 @@ function template_preprocess_eventinstance(array &$variables) {
   // Set the eventinstance object to be accessible in the template.
   $variables['eventinstance'] = $variables['elements']['#eventinstance'];
 
-  // Set a class on the eventinstance to differentiate between viewmodes.
+  // Set a class on the eventinstance to differentiate between view modes.
   $variables['view_mode'] = $variables['elements']['#view_mode'];
   $variables['attributes']['class'][] = 'eventinstance-' . $variables['view_mode'];
 
@@ -121,7 +121,7 @@ function template_preprocess_eventseries(array &$variables) {
   // Set the eventseries object to be accessible in the template.
   $variables['eventseries'] = $variables['elements']['#eventseries'];
 
-  // Set a class on the eventseries to differentiate between viewmodes.
+  // Set a class on the eventseries to differentiate between view modes.
   $variables['view_mode'] = $variables['elements']['#view_mode'];
   $variables['attributes']['class'][] = 'eventseries-' . $variables['view_mode'];
 
diff --git a/recurring_events.permissions.yml b/recurring_events.permissions.yml
index eced703301071da3c27bb2d167be2b4b5f59b8ca..95ecbc44c76f23a6eedf70b04789392bde78eb4c 100644
--- a/recurring_events.permissions.yml
+++ b/recurring_events.permissions.yml
@@ -7,7 +7,7 @@ view eventseries entity:
   description: 'View existing event series entities'
 view unpublished eventseries entity:
   title: 'View unpublished eventseries entity'
-  description: 'View exisiting unpublished event series entities'
+  description: 'View existing unpublished event series entities'
 edit eventseries entity:
   title: 'Edit eventseries entity'
   description: 'Modify existing event series entities'
@@ -39,7 +39,7 @@ view eventinstance entity:
   description: 'View existing event instance entities'
 view unpublished eventinstance entity:
   title: 'View unpublished eventinstance entity'
-  description: 'View exisiting unpublished event instance entities'
+  description: 'View existing unpublished event instance entities'
 edit eventinstance entity:
   title: 'Edit eventinstance entity'
   description: 'Modify existing event instance entities'
diff --git a/src/Entity/EventSeries.php b/src/Entity/EventSeries.php
index f7bd9dd2c4d7383b8fc5cc1f48209ccb4c373962..5d536ad71cee3d56b23dc304420cb41ea0dd58a3 100644
--- a/src/Entity/EventSeries.php
+++ b/src/Entity/EventSeries.php
@@ -264,7 +264,7 @@ class EventSeries extends EditorialContentEntityBase implements EventInterface {
    * Field name, type and size determine the table structure.
    *
    * In addition, we can define how the field and its content can be manipulated
-   * in the GUI. The behaviour of the widgets used can be determined here.
+   * in the GUI. The behavior of the widgets used can be determined here.
    */
   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields = parent::baseFieldDefinitions($entity_type);
diff --git a/src/EventCreationService.php b/src/EventCreationService.php
index 598bba95f36255b7cd5c38fa0b21d111d9e9b403..3397d5a7e3c1650fb7c852df554586c045cc8878 100644
--- a/src/EventCreationService.php
+++ b/src/EventCreationService.php
@@ -270,7 +270,7 @@ class EventCreationService {
 
   /**
    * Normalize an array for equality checks, without having to worry about order
-   * or casing discrepencies.
+   * or casing discrepancies.
    *
    * @param array $input
    *   The array to clean and sort.
diff --git a/src/Form/EventSeriesTypeDeleteForm.php b/src/Form/EventSeriesTypeDeleteForm.php
index 66dab774e9e7b55f0284ea6a773beff30ffc5c3b..3433b549623bf553415190de58b930661a85b08d 100644
--- a/src/Form/EventSeriesTypeDeleteForm.php
+++ b/src/Form/EventSeriesTypeDeleteForm.php
@@ -88,7 +88,7 @@ class EventSeriesTypeDeleteForm extends EntityConfirmFormBase {
     $this->entity->delete();
 
     $this->messenger->addMessage(
-      $this->t('Succesfully deleted @type: @label.',
+      $this->t('Successfully deleted @type: @label.',
         [
           '@type' => $this->entity->bundle(),
           '@label' => $this->entity->label(),
diff --git a/src/Plugin/Field/FieldType/MonthlyRecurringDate.php b/src/Plugin/Field/FieldType/MonthlyRecurringDate.php
index 4fc1f03a548add1778845ec18f80b3757b19ed60..a3db821460e0a259a5c42f5e72f6eedf58742d23 100644
--- a/src/Plugin/Field/FieldType/MonthlyRecurringDate.php
+++ b/src/Plugin/Field/FieldType/MonthlyRecurringDate.php
@@ -77,7 +77,7 @@ class MonthlyRecurringDate extends WeeklyRecurringDate implements RecurringEvent
 
     $properties['day_occurrence'] = DataDefinition::create('string')
       ->setLabel(t('Day Occurrence'))
-      ->setDescription(t('Which occurence of the day(s) of the week should event take place'));
+      ->setDescription(t('Which occurrence of the day(s) of the week should event take place'));
 
     $properties['day_of_month'] = DataDefinition::create('string')
       ->setLabel(t('Day of Month'))
diff --git a/src/Plugin/RecurringEventsFieldTrait.php b/src/Plugin/RecurringEventsFieldTrait.php
index 94dcdb72ed820ab7669e9d85bd70cc0ada6a27a8..7d4cbfdbeed91d03a0cba50c0aba4e2aaad5ac52 100644
--- a/src/Plugin/RecurringEventsFieldTrait.php
+++ b/src/Plugin/RecurringEventsFieldTrait.php
@@ -31,7 +31,7 @@ trait RecurringEventsFieldTrait {
       $min_time = DrupalDateTime::createFromFormat('h:ia', $min_time);
       $max_time = DrupalDateTime::createFromFormat('h:ia', $max_time);
 
-      // Convert the mininum time to a number of seconds after midnight.
+      // Convert the minimum time to a number of seconds after midnight.
       $lower_hour = $min_time->format('H') * 60 * 60;
       $lower_minute = $min_time->format('i') * 60;
       $lower = $lower_hour + $lower_minute;